/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * Detailed user information
 * @class
 */
class UserDetailInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Types of returned information. Group: returned information about the working group where the current user is; DataAuth: returned information about the current user's data permission; EngineAuth: returned information about the current user's engine permission
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Types of users. ADMIN: administrators; COMMON: general users
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserType = null;

        /**
         * User description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserDescription = null;

        /**
         * Collection of data permission information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Policys || null}
         */
        this.DataPolicyInfo = null;

        /**
         * Collection of engine permissions
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Policys || null}
         */
        this.EnginePolicyInfo = null;

        /**
         * Information about collections of working groups bound to the user
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {WorkGroups || null}
         */
        this.WorkGroupInfo = null;

        /**
         * User alias
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserAlias = null;

        /**
         * Collection of filtered rows
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Policys || null}
         */
        this.RowFilterInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.UserType = 'UserType' in params ? params.UserType : null;
        this.UserDescription = 'UserDescription' in params ? params.UserDescription : null;

        if (params.DataPolicyInfo) {
            let obj = new Policys();
            obj.deserialize(params.DataPolicyInfo)
            this.DataPolicyInfo = obj;
        }

        if (params.EnginePolicyInfo) {
            let obj = new Policys();
            obj.deserialize(params.EnginePolicyInfo)
            this.EnginePolicyInfo = obj;
        }

        if (params.WorkGroupInfo) {
            let obj = new WorkGroups();
            obj.deserialize(params.WorkGroupInfo)
            this.WorkGroupInfo = obj;
        }
        this.UserAlias = 'UserAlias' in params ? params.UserAlias : null;

        if (params.RowFilterInfo) {
            let obj = new Policys();
            obj.deserialize(params.RowFilterInfo)
            this.RowFilterInfo = obj;
        }

    }
}

/**
 * CheckDataEngineConfigPairsValidity response structure.
 * @class
 */
class CheckDataEngineConfigPairsValidityResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Validity of parameters. true: valid; false: There is at least one invalid parameter.
         * @type {boolean || null}
         */
        this.IsAvailable = null;

        /**
         * Collection of invalid parameters
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.UnavailableConfig = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsAvailable = 'IsAvailable' in params ? params.IsAvailable : null;
        this.UnavailableConfig = 'UnavailableConfig' in params ? params.UnavailableConfig : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeResultDownload response structure.
 * @class
 */
class DescribeResultDownloadResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The file save path.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Path = null;

        /**
         * The task status. Valid values: `init`, `queue`, `format`, `compress`, `success`, `timeout`, and `error`.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The task exception cause.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Reason = null;

        /**
         * The temporary secret ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SecretId = null;

        /**
         * The temporary secret key.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * The temporary token.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Token = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Path = 'Path' in params ? params.Path : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Reason = 'Reason' in params ? params.Reason : null;
        this.SecretId = 'SecretId' in params ? params.SecretId : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.Token = 'Token' in params ? params.Token : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information about visits to the engine
 * @class
 */
class AccessInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Methods to visit the engine
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessType = null;

        /**
         * URL that visits the engine and part of internal parameters should be taken place according to the actual situation.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.AccessConnectionInfos = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AccessType = 'AccessType' in params ? params.AccessType : null;
        this.AccessConnectionInfos = 'AccessConnectionInfos' in params ? params.AccessConnectionInfos : null;

    }
}

/**
 * Presto monitoring metrics
 * @class
 */
class PrestoMonitorMetrics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.LocalCacheHitRate = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FragmentCacheHitRate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LocalCacheHitRate = 'LocalCacheHitRate' in params ? params.LocalCacheHitRate : null;
        this.FragmentCacheHitRate = 'FragmentCacheHitRate' in params ? params.FragmentCacheHitRate : null;

    }
}

/**
 * ModifyDataEngineDescription request structure.
 * @class
 */
class ModifyDataEngineDescriptionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name of the engine to be modified
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Engine description and its maximum length is 250 characters.
         * @type {string || null}
         */
        this.Message = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.Message = 'Message' in params ? params.Message : null;

    }
}

/**
 * Statement information
 * @class
 */
class StatementInformation extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the SQL task
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * SQL content
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SQL = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SQL = 'SQL' in params ? params.SQL : null;

    }
}

/**
 * DescribeUpdatableDataEngines response structure.
 * @class
 */
class DescribeUpdatableDataEnginesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Basic cluster information
         * @type {Array.<DataEngineBasicInfo> || null}
         */
        this.DataEngineBasicInfos = null;

        /**
         * Number of clusters
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DataEngineBasicInfos) {
            this.DataEngineBasicInfos = new Array();
            for (let z in params.DataEngineBasicInfos) {
                let obj = new DataEngineBasicInfo();
                obj.deserialize(params.DataEngineBasicInfos[z]);
                this.DataEngineBasicInfos.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteUser request structure.
 * @class
 */
class DeleteUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the user to be deleted
         * @type {Array.<string> || null}
         */
        this.UserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserIds = 'UserIds' in params ? params.UserIds : null;

    }
}

/**
 * DescribeUserDataEngineConfig response structure.
 * @class
 */
class DescribeUserDataEngineConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of custom configuration items of the user's engine
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DataEngineConfigInstanceInfo> || null}
         */
        this.DataEngineConfigInstanceInfos = null;

        /**
         * Total configuration items
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DataEngineConfigInstanceInfos) {
            this.DataEngineConfigInstanceInfos = new Array();
            for (let z in params.DataEngineConfigInstanceInfos) {
                let obj = new DataEngineConfigInstanceInfo();
                obj.deserialize(params.DataEngineConfigInstanceInfos[z]);
                this.DataEngineConfigInstanceInfos.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Basic metadata object
 * @class
 */
class Asset extends  AbstractModel {
    constructor(){
        super();

        /**
         * Primary key
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Object GUID value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Guid = null;

        /**
         * Data directory
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Description information
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Object owner
         * @type {string || null}
         */
        this.Owner = null;

        /**
         * Object owner account
         * @type {string || null}
         */
        this.OwnerAccount = null;

        /**
         * Permission
         * @type {Array.<KVPair> || null}
         */
        this.PermValues = null;

        /**
         * Additional attributes
         * @type {Array.<KVPair> || null}
         */
        this.Params = null;

        /**
         * Additional business attributes
         * @type {Array.<KVPair> || null}
         */
        this.BizParams = null;

        /**
         * Data version
         * @type {number || null}
         */
        this.DataVersion = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.ModifiedTime = null;

        /**
         * Data source primary key
         * @type {number || null}
         */
        this.DatasourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Guid = 'Guid' in params ? params.Guid : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.OwnerAccount = 'OwnerAccount' in params ? params.OwnerAccount : null;

        if (params.PermValues) {
            this.PermValues = new Array();
            for (let z in params.PermValues) {
                let obj = new KVPair();
                obj.deserialize(params.PermValues[z]);
                this.PermValues.push(obj);
            }
        }

        if (params.Params) {
            this.Params = new Array();
            for (let z in params.Params) {
                let obj = new KVPair();
                obj.deserialize(params.Params[z]);
                this.Params.push(obj);
            }
        }

        if (params.BizParams) {
            this.BizParams = new Array();
            for (let z in params.BizParams) {
                let obj = new KVPair();
                obj.deserialize(params.BizParams[z]);
                this.BizParams.push(obj);
            }
        }
        this.DataVersion = 'DataVersion' in params ? params.DataVersion : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifiedTime = 'ModifiedTime' in params ? params.ModifiedTime : null;
        this.DatasourceId = 'DatasourceId' in params ? params.DatasourceId : null;

    }
}

/**
 * Engine specification details
 * @class
 */
class DataEngineScaleInfoDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Start time of counting in the format of yyyy-MM-dd HH:mm:ss
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time of counting in the format of yyyy-MM-dd HH:mm:ss
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Current statistical time period and engine specifications
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CU = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.CU = 'CU' in params ? params.CU : null;

    }
}

/**
 * DescribeDataMaskStrategies response structure.
 * @class
 */
class DescribeDataMaskStrategiesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total DMask policies.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * DMask policy list. specifies the list of data masking policies.
         * @type {Array.<DataMaskStrategy> || null}
         */
        this.Strategies = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Strategies) {
            this.Strategies = new Array();
            for (let z in params.Strategies) {
                let obj = new DataMaskStrategy();
                obj.deserialize(params.Strategies[z]);
                this.Strategies.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Operation information in the logs of a Spark SQL batch job
 * @class
 */
class SparkSessionBatchLogOperate extends  AbstractModel {
    constructor(){
        super();

        /**
         * The operation message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Text = null;

        /**
         * The operation type. Valid values: `COPY`, `LOG`, `UI`, `RESULT`, `List`, and `TAB`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operate = null;

        /**
         * Additional information, such as taskid, sessionid, and sparkui.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<KVPair> || null}
         */
        this.Supplement = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Text = 'Text' in params ? params.Text : null;
        this.Operate = 'Operate' in params ? params.Operate : null;

        if (params.Supplement) {
            this.Supplement = new Array();
            for (let z in params.Supplement) {
                let obj = new KVPair();
                obj.deserialize(params.Supplement[z]);
                this.Supplement.push(obj);
            }
        }

    }
}

/**
 * DescribeTaskResult response structure.
 * @class
 */
class DescribeTaskResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The queried task information. If the returned value is empty, the task with the entered task ID does not exist. The task result will be returned only if the task status is `2` (succeeded).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {TaskResultInfo || null}
         */
        this.TaskInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TaskInfo) {
            let obj = new TaskResultInfo();
            obj.deserialize(params.TaskInfo)
            this.TaskInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteDataEngine response structure.
 * @class
 */
class DeleteDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDMSDatabaseList request structure.
 * @class
 */
class DescribeDMSDatabaseListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Schema name
         * @type {string || null}
         */
        this.SchemaName = null;

        /**
         * Match rules
         * @type {string || null}
         */
        this.Pattern = null;

        /**
         * Pagination parameters, indicating the size of a single page.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination parameters
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Sorting fields
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * Sorting fields: true for ascending order; false for descending order
         * @type {boolean || null}
         */
        this.Asc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.SchemaName = 'SchemaName' in params ? params.SchemaName : null;
        this.Pattern = 'Pattern' in params ? params.Pattern : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

    }
}

/**
 * DropDLCTable request structure.
 * @class
 */
class DropDLCTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine name
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Database name
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Data table name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Whether to delete the data
         * @type {boolean || null}
         */
        this.DeleteData = null;

        /**
         * Resource group name
         * @type {string || null}
         */
        this.ResourceGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.DeleteData = 'DeleteData' in params ? params.DeleteData : null;
        this.ResourceGroupName = 'ResourceGroupName' in params ? params.ResourceGroupName : null;

    }
}

/**
 * COS permissions
 * @class
 */
class CosPermission extends  AbstractModel {
    constructor(){
        super();

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CosPath = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Permissions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosPath = 'CosPath' in params ? params.CosPath : null;
        this.Permissions = 'Permissions' in params ? params.Permissions : null;

    }
}

/**
 * CreateDLCTable response structure.
 * @class
 */
class CreateDLCTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * DLC table information object
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DLCTable || null}
         */
        this.DLCTable = null;

        /**
         * The SQL statement for creating a managed storage internal table
         * @type {string || null}
         */
        this.Execution = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DLCTable) {
            let obj = new DLCTable();
            obj.deserialize(params.DLCTable)
            this.DLCTable = obj;
        }
        this.Execution = 'Execution' in params ? params.Execution : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyGovernEventRule response structure.
 * @class
 */
class ModifyGovernEventRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeQuery request structure.
 * @class
 */
class DescribeQueryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * Spark monitoring metrics
 * @class
 */
class SparkMonitorMetrics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ShuffleWriteBytesCos = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ShuffleWriteBytesTotal = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ShuffleWriteBytesCos = 'ShuffleWriteBytesCos' in params ? params.ShuffleWriteBytesCos : null;
        this.ShuffleWriteBytesTotal = 'ShuffleWriteBytesTotal' in params ? params.ShuffleWriteBytesTotal : null;

    }
}

/**
 * RestartDataEngine request structure.
 * @class
 */
class RestartDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Whether to restart by force and ignore tasks
         * @type {boolean || null}
         */
        this.ForcedOperation = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.ForcedOperation = 'ForcedOperation' in params ? params.ForcedOperation : null;

    }
}

/**
 * CreateDMSDatabase response structure.
 * @class
 */
class CreateDMSDatabaseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateStoreLocation response structure.
 * @class
 */
class CreateStoreLocationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDMSDatabase response structure.
 * @class
 */
class DescribeDMSDatabaseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Schema name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SchemaName = null;

        /**
         * Storage address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Location = null;

        /**
         * Data object
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Asset || null}
         */
        this.Asset = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.SchemaName = 'SchemaName' in params ? params.SchemaName : null;
        this.Location = 'Location' in params ? params.Location : null;

        if (params.Asset) {
            let obj = new Asset();
            obj.deserialize(params.Asset)
            this.Asset = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTablesName request structure.
 * @class
 */
class DescribeTablesNameRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List all the data tables in the database.
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Quantity of returns. It is 10 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Data offset. It starts from 0 and is 0 by default.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter criteria. The following filter types are supported. The Name should be one of them.
Table-name - String - (filter criteria) data table name, such as table-001.
table-id - String - (filter criteria) table id, such as 12342.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Specified data source name to be queried, and it is DataLakeCatalog by default.
         * @type {string || null}
         */
        this.DatasourceConnectionName = null;

        /**
         * Start time: It is used to filter the update time, and the format is yyyy-mm-dd HH:MM:SS.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time: It is used to filter the update time, and the format is yyyy-mm-dd HH:MM:SS.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Sorting fields, and they support CreateTime (creation time), UpdateTime (update time), StorageSize (storage space), RecordCount (number of rows), and Name (table name) (The ascending order according to names will be adopted if it is not passed).
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * Sorting fields, and false means the descending order (by default) while true means the ascending order.
         * @type {boolean || null}
         */
        this.Asc = null;

        /**
         * Table type, query of the table type, and the available value is EXTERNAL_TABLE,INDEX_TABLE,MANAGED_TABLE,MATERIALIZED_VIEW,TABLE,VIEW,VIRTUAL_VIEW
         * @type {string || null}
         */
        this.TableType = null;

        /**
         * Filter fields - table format: If no criteria are specified, all the items will be checked; LAKEFS: managed table; ICEBERG: non-managed iceberg table; HIVE: non-managed hive table; OTHER: other non-managed tables.
         * @type {string || null}
         */
        this.TableFormat = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.DatasourceConnectionName = 'DatasourceConnectionName' in params ? params.DatasourceConnectionName : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Asc = 'Asc' in params ? params.Asc : null;
        this.TableType = 'TableType' in params ? params.TableType : null;
        this.TableFormat = 'TableFormat' in params ? params.TableFormat : null;

    }
}

/**
 * Collection of policies
 * @class
 */
class Policys extends  AbstractModel {
    constructor(){
        super();

        /**
         * Collection of policies
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

        /**
         * Total policies
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DescribeOtherCHDFSBindingList request structure.
 * @class
 */
class DescribeOtherCHDFSBindingListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Bucket name
         * @type {string || null}
         */
        this.BucketId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BucketId = 'BucketId' in params ? params.BucketId : null;

    }
}

/**
 * ModifyWorkGroup response structure.
 * @class
 */
class ModifyWorkGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetachUserPolicy response structure.
 * @class
 */
class DetachUserPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Spark job details
 * @class
 */
class SparkJobInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Spark job ID
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Spark job name
         * @type {string || null}
         */
        this.JobName = null;

        /**
         * Spark job type. Valid values: `1` (batch job), `2` (streaming job).
         * @type {number || null}
         */
        this.JobType = null;

        /**
         * Engine name
         * @type {string || null}
         */
        this.DataEngine = null;

        /**
         * This field has been disused. Use the `Datasource` field instead.
         * @type {string || null}
         */
        this.Eni = null;

        /**
         * Whether the program package is uploaded locally. Valid values: `cos`, `lakefs`.
         * @type {string || null}
         */
        this.IsLocal = null;

        /**
         * Program package path
         * @type {string || null}
         */
        this.JobFile = null;

        /**
         * Role ID
         * @type {number || null}
         */
        this.RoleArn = null;

        /**
         * Main class of Spark job execution
         * @type {string || null}
         */
        this.MainClass = null;

        /**
         * Command line parameters of the Spark job separated by space
         * @type {string || null}
         */
        this.CmdArgs = null;

        /**
         * Native Spark configurations separated by line break
         * @type {string || null}
         */
        this.JobConf = null;

        /**
         * Whether the dependency JAR packages are uploaded locally. Valid values: `cos`, `lakefs`.
         * @type {string || null}
         */
        this.IsLocalJars = null;

        /**
         * Dependency JAR packages of the Spark job separated by comma
         * @type {string || null}
         */
        this.JobJars = null;

        /**
         * Whether the dependency file is uploaded locally. Valid values: `cos`, `lakefs`.
         * @type {string || null}
         */
        this.IsLocalFiles = null;

        /**
         * Dependency files of the Spark job separated by comma
         * @type {string || null}
         */
        this.JobFiles = null;

        /**
         * Driver resource size of the Spark job
         * @type {string || null}
         */
        this.JobDriverSize = null;

        /**
         * Executor resource size of the Spark job
         * @type {string || null}
         */
        this.JobExecutorSize = null;

        /**
         * Number of Spark job executors
         * @type {number || null}
         */
        this.JobExecutorNums = null;

        /**
         * Maximum number of retries of the Spark flow task
         * @type {number || null}
         */
        this.JobMaxAttempts = null;

        /**
         * Spark job creator
         * @type {string || null}
         */
        this.JobCreator = null;

        /**
         * Spark job creation time
         * @type {number || null}
         */
        this.JobCreateTime = null;

        /**
         * Spark job update time
         * @type {number || null}
         */
        this.JobUpdateTime = null;

        /**
         * Last task ID of the Spark job
         * @type {string || null}
         */
        this.CurrentTaskId = null;

        /**
         * Last status of the Spark job
         * @type {number || null}
         */
        this.JobStatus = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {StreamingStatistics || null}
         */
        this.StreamingStat = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataSource = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IsLocalPythonFiles = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppPythonFiles = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IsLocalArchives = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobArchives = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkImage = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobPythonFiles = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TaskNum = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DataEngineStatus = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.JobExecutorMaxNumbers = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkImageVersion = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineClusterType = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineImageVersion = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsInherit = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsSessionStarted = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EngineTypeDetail = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.JobName = 'JobName' in params ? params.JobName : null;
        this.JobType = 'JobType' in params ? params.JobType : null;
        this.DataEngine = 'DataEngine' in params ? params.DataEngine : null;
        this.Eni = 'Eni' in params ? params.Eni : null;
        this.IsLocal = 'IsLocal' in params ? params.IsLocal : null;
        this.JobFile = 'JobFile' in params ? params.JobFile : null;
        this.RoleArn = 'RoleArn' in params ? params.RoleArn : null;
        this.MainClass = 'MainClass' in params ? params.MainClass : null;
        this.CmdArgs = 'CmdArgs' in params ? params.CmdArgs : null;
        this.JobConf = 'JobConf' in params ? params.JobConf : null;
        this.IsLocalJars = 'IsLocalJars' in params ? params.IsLocalJars : null;
        this.JobJars = 'JobJars' in params ? params.JobJars : null;
        this.IsLocalFiles = 'IsLocalFiles' in params ? params.IsLocalFiles : null;
        this.JobFiles = 'JobFiles' in params ? params.JobFiles : null;
        this.JobDriverSize = 'JobDriverSize' in params ? params.JobDriverSize : null;
        this.JobExecutorSize = 'JobExecutorSize' in params ? params.JobExecutorSize : null;
        this.JobExecutorNums = 'JobExecutorNums' in params ? params.JobExecutorNums : null;
        this.JobMaxAttempts = 'JobMaxAttempts' in params ? params.JobMaxAttempts : null;
        this.JobCreator = 'JobCreator' in params ? params.JobCreator : null;
        this.JobCreateTime = 'JobCreateTime' in params ? params.JobCreateTime : null;
        this.JobUpdateTime = 'JobUpdateTime' in params ? params.JobUpdateTime : null;
        this.CurrentTaskId = 'CurrentTaskId' in params ? params.CurrentTaskId : null;
        this.JobStatus = 'JobStatus' in params ? params.JobStatus : null;

        if (params.StreamingStat) {
            let obj = new StreamingStatistics();
            obj.deserialize(params.StreamingStat)
            this.StreamingStat = obj;
        }
        this.DataSource = 'DataSource' in params ? params.DataSource : null;
        this.IsLocalPythonFiles = 'IsLocalPythonFiles' in params ? params.IsLocalPythonFiles : null;
        this.AppPythonFiles = 'AppPythonFiles' in params ? params.AppPythonFiles : null;
        this.IsLocalArchives = 'IsLocalArchives' in params ? params.IsLocalArchives : null;
        this.JobArchives = 'JobArchives' in params ? params.JobArchives : null;
        this.SparkImage = 'SparkImage' in params ? params.SparkImage : null;
        this.JobPythonFiles = 'JobPythonFiles' in params ? params.JobPythonFiles : null;
        this.TaskNum = 'TaskNum' in params ? params.TaskNum : null;
        this.DataEngineStatus = 'DataEngineStatus' in params ? params.DataEngineStatus : null;
        this.JobExecutorMaxNumbers = 'JobExecutorMaxNumbers' in params ? params.JobExecutorMaxNumbers : null;
        this.SparkImageVersion = 'SparkImageVersion' in params ? params.SparkImageVersion : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.DataEngineClusterType = 'DataEngineClusterType' in params ? params.DataEngineClusterType : null;
        this.DataEngineImageVersion = 'DataEngineImageVersion' in params ? params.DataEngineImageVersion : null;
        this.IsInherit = 'IsInherit' in params ? params.IsInherit : null;
        this.IsSessionStarted = 'IsSessionStarted' in params ? params.IsSessionStarted : null;
        this.EngineTypeDetail = 'EngineTypeDetail' in params ? params.EngineTypeDetail : null;

    }
}

/**
 * SwitchDataEngine request structure.
 * @class
 */
class SwitchDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The name of the primary cluster.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Whether to start the standby cluster.
         * @type {boolean || null}
         */
        this.StartStandbyCluster = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.StartStandbyCluster = 'StartStandbyCluster' in params ? params.StartStandbyCluster : null;

    }
}

/**
 * SuspendResumeDataEngine response structure.
 * @class
 */
class SuspendResumeDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The details of the virtual cluster.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteSparkApp request structure.
 * @class
 */
class DeleteSparkAppRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Spark job name.
         * @type {string || null}
         */
        this.AppName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AppName = 'AppName' in params ? params.AppName : null;

    }
}

/**
 * Permission to visit DLC data logs
 * @class
 */
class DLCCatalogAccess extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPCID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Product type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Product = null;

        /**
         * Description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Product = 'Product' in params ? params.Product : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * CheckGrantedPermission response structure.
 * @class
 */
class CheckGrantedPermissionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Permission status
         * @type {Array.<PermissionResponseInfo> || null}
         */
        this.PermissionResponses = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.PermissionResponses) {
            this.PermissionResponses = new Array();
            for (let z in params.PermissionResponses) {
                let obj = new PermissionResponseInfo();
                obj.deserialize(params.PermissionResponses[z]);
                this.PermissionResponses.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUser response structure.
 * @class
 */
class ModifyUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SwitchDataEngineImage response structure.
 * @class
 */
class SwitchDataEngineImageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Python-spark image information.
 * @class
 */
class PythonSparkImage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the spark image
         * @type {string || null}
         */
        this.SparkImageId = null;

        /**
         * ID of the cluster image of the minor version
         * @type {string || null}
         */
        this.ChildImageVersionId = null;

        /**
         * Name of the spark image
         * @type {string || null}
         */
        this.SparkImageVersion = null;

        /**
         * Description of the spark image
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Update time
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SparkImageId = 'SparkImageId' in params ? params.SparkImageId : null;
        this.ChildImageVersionId = 'ChildImageVersionId' in params ? params.ChildImageVersionId : null;
        this.SparkImageVersion = 'SparkImageVersion' in params ? params.SparkImageVersion : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * Task type, such as SQL query.
 * @class
 */
class Task extends  AbstractModel {
    constructor(){
        super();

        /**
         * SQL query task
         * @type {SQLTask || null}
         */
        this.SQLTask = null;

        /**
         * Spark SQL query task
         * @type {SQLTask || null}
         */
        this.SparkSQLTask = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SQLTask) {
            let obj = new SQLTask();
            obj.deserialize(params.SQLTask)
            this.SQLTask = obj;
        }

        if (params.SparkSQLTask) {
            let obj = new SQLTask();
            obj.deserialize(params.SparkSQLTask)
            this.SparkSQLTask = obj;
        }

    }
}

/**
 * Engine configuration information
 * @class
 */
class DataEngineConfigInstanceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Collection of user-defined configuration items
         * @type {Array.<DataEngineConfigPair> || null}
         */
        this.DataEngineConfigPairs = null;

        /**
         * Template of the resource parameter configuration of the job cluster
         * @type {SessionResourceTemplate || null}
         */
        this.SessionResourceTemplate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;

        if (params.DataEngineConfigPairs) {
            this.DataEngineConfigPairs = new Array();
            for (let z in params.DataEngineConfigPairs) {
                let obj = new DataEngineConfigPair();
                obj.deserialize(params.DataEngineConfigPairs[z]);
                this.DataEngineConfigPairs.push(obj);
            }
        }

        if (params.SessionResourceTemplate) {
            let obj = new SessionResourceTemplate();
            obj.deserialize(params.SessionResourceTemplate)
            this.SessionResourceTemplate = obj;
        }

    }
}

/**
 * DetachUserPolicy request structure.
 * @class
 */
class DetachUserPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID, which matches Uin on the CAM side.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Collection of unbound permissions
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }

    }
}

/**
 * Scheduled start and suspension information
 * @class
 */
class CrontabResumeSuspendStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scheduled starting time, such as 8: 00 a.m. on Monday and Wednesday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResumeTime = null;

        /**
         * Scheduled suspension time, such as 8: 00 p.m. on Monday and Wednesday
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SuspendTime = null;

        /**
         * The suspension setting. Valid values: `0` (suspension after task end, default) and `1` (force suspension).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SuspendStrategy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResumeTime = 'ResumeTime' in params ? params.ResumeTime : null;
        this.SuspendTime = 'SuspendTime' in params ? params.SuspendTime : null;
        this.SuspendStrategy = 'SuspendStrategy' in params ? params.SuspendStrategy : null;

    }
}

/**
 * DescribeQuery response structure.
 * @class
 */
class DescribeQueryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The SQL being executed currently. A task contains one SQL.
         * @type {string || null}
         */
        this.SQL = null;

        /**
         * The currently executed task types are divided into DDL, DML, and DQL.
         * @type {string || null}
         */
        this.SQLType = null;

        /**
         * The current status of the task is 0: initializing; 1: running; 2: executed; 3: writing data; 4: queuing; -1: task execution failed; -3: manually terminated. The task execution result is returned only when the task is successfully executed.
         * @type {number || null}
         */
        this.State = null;

        /**
         * Default data set of query results
         * @type {string || null}
         */
        this.DataSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SQL = 'SQL' in params ? params.SQL : null;
        this.SQLType = 'SQLType' in params ? params.SQLType : null;
        this.State = 'State' in params ? params.State : null;
        this.DataSet = 'DataSet' in params ? params.DataSet : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateCHDFSBindingProduct request structure.
 * @class
 */
class CreateCHDFSBindingProductRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Names of metadata acceleration buckets to be bound
         * @type {string || null}
         */
        this.MountPoint = null;

        /**
         * Types of buckets which are divided into cos and lakefs
         * @type {string || null}
         */
        this.BucketType = null;

        /**
         * Product name
         * @type {string || null}
         */
        this.ProductName = null;

        /**
         * Engine name. When ProductName selects DLC products, this parameter must be specified. When ProductName selects other products, it can be unspecified.
         * @type {string || null}
         */
        this.EngineName = null;

        /**
         * VPC information. When the product name is other, this parameter must be specified.
         * @type {Array.<VpcInfo> || null}
         */
        this.VpcInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MountPoint = 'MountPoint' in params ? params.MountPoint : null;
        this.BucketType = 'BucketType' in params ? params.BucketType : null;
        this.ProductName = 'ProductName' in params ? params.ProductName : null;
        this.EngineName = 'EngineName' in params ? params.EngineName : null;

        if (params.VpcInfo) {
            this.VpcInfo = new Array();
            for (let z in params.VpcInfo) {
                let obj = new VpcInfo();
                obj.deserialize(params.VpcInfo[z]);
                this.VpcInfo.push(obj);
            }
        }

    }
}

/**
 * DescribeTasks response structure.
 * @class
 */
class DescribeTasksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of task objects.
         * @type {Array.<TaskResponseInfo> || null}
         */
        this.TaskList = null;

        /**
         * Total number of instances
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The task overview.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {TasksOverview || null}
         */
        this.TasksOverview = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TaskList) {
            this.TaskList = new Array();
            for (let z in params.TaskList) {
                let obj = new TaskResponseInfo();
                obj.deserialize(params.TaskList[z]);
                this.TaskList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.TasksOverview) {
            let obj = new TasksOverview();
            obj.deserialize(params.TasksOverview)
            this.TasksOverview = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DropDMSTable response structure.
 * @class
 */
class DropDMSTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RestartDataEngine response structure.
 * @class
 */
class RestartDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Common task metrics
 * @class
 */
class CommonMetrics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTaskTime = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProcessTime = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.QueueTime = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExecutionTime = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsResultCacheHit = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MatchedMVBytes = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MatchedMVs = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AffectedBytes = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AffectedRows = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProcessedBytes = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProcessedRows = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CreateTaskTime = 'CreateTaskTime' in params ? params.CreateTaskTime : null;
        this.ProcessTime = 'ProcessTime' in params ? params.ProcessTime : null;
        this.QueueTime = 'QueueTime' in params ? params.QueueTime : null;
        this.ExecutionTime = 'ExecutionTime' in params ? params.ExecutionTime : null;
        this.IsResultCacheHit = 'IsResultCacheHit' in params ? params.IsResultCacheHit : null;
        this.MatchedMVBytes = 'MatchedMVBytes' in params ? params.MatchedMVBytes : null;
        this.MatchedMVs = 'MatchedMVs' in params ? params.MatchedMVs : null;
        this.AffectedBytes = 'AffectedBytes' in params ? params.AffectedBytes : null;
        this.AffectedRows = 'AffectedRows' in params ? params.AffectedRows : null;
        this.ProcessedBytes = 'ProcessedBytes' in params ? params.ProcessedBytes : null;
        this.ProcessedRows = 'ProcessedRows' in params ? params.ProcessedRows : null;

    }
}

/**
 * User role
 * @class
 */
class UserRole extends  AbstractModel {
    constructor(){
        super();

        /**
         * The role ID.
         * @type {number || null}
         */
        this.RoleId = null;

        /**
         * The user's app ID.
         * @type {string || null}
         */
        this.AppId = null;

        /**
         * The user ID.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * The role permission.
         * @type {string || null}
         */
        this.Arn = null;

        /**
         * The last modified timestamp.
         * @type {number || null}
         */
        this.ModifyTime = null;

        /**
         * The role description.
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RoleName = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Creator = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CosPermission> || null}
         */
        this.CosPermissionList = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PermissionJson = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoleId = 'RoleId' in params ? params.RoleId : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.Arn = 'Arn' in params ? params.Arn : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;
        this.Desc = 'Desc' in params ? params.Desc : null;
        this.RoleName = 'RoleName' in params ? params.RoleName : null;
        this.Creator = 'Creator' in params ? params.Creator : null;

        if (params.CosPermissionList) {
            this.CosPermissionList = new Array();
            for (let z in params.CosPermissionList) {
                let obj = new CosPermission();
                obj.deserialize(params.CosPermissionList[z]);
                this.CosPermissionList.push(obj);
            }
        }
        this.PermissionJson = 'PermissionJson' in params ? params.PermissionJson : null;

    }
}

/**
 * Basic information of DataEngine
 * @class
 */
class DataEngineBasicInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * DataEngine name
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Data engine status: -2: deleted; -1: failed; 0: initializing; 1: suspended; 2: running; 3: ready to delete; 4: deleting
         * @type {number || null}
         */
        this.State = null;

        /**
         * Creation time
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Update time
         * @type {number || null}
         */
        this.UpdateTime = null;

        /**
         * Returned information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Engine types, and the valid values are PrestoSQL, SparkSQL, and SparkBatch.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineType = null;

        /**
         * User ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Account ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserUin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.State = 'State' in params ? params.State : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.DataEngineType = 'DataEngineType' in params ? params.DataEngineType : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.UserUin = 'UserUin' in params ? params.UserUin : null;

    }
}

/**
 * DetachWorkGroupPolicy response structure.
 * @class
 */
class DetachWorkGroupPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSparkSessionBatchSqlLog response structure.
 * @class
 */
class DescribeSparkSessionBatchSqlLogResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Status: 0: running; 1: successful; 2: failed; 3: cancellation; 4: timeout
         * @type {number || null}
         */
        this.State = null;

        /**
         * The log information list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<SparkSessionBatchLog> || null}
         */
        this.LogSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.State = 'State' in params ? params.State : null;

        if (params.LogSet) {
            this.LogSet = new Array();
            for (let z in params.LogSet) {
                let obj = new SparkSessionBatchLog();
                obj.deserialize(params.LogSet[z]);
                this.LogSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDLCTableList response structure.
 * @class
 */
class DescribeDLCTableListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * DLC metadata list information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DLCTable> || null}
         */
        this.TableList = null;

        /**
         * Statistical value
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TableList) {
            this.TableList = new Array();
            for (let z in params.TableList) {
                let obj = new DLCTable();
                obj.deserialize(params.TableList[z]);
                this.TableList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GenerateCreateMangedTableSql request structure.
 * @class
 */
class GenerateCreateMangedTableSqlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The basic table information.
         * @type {TableBaseInfo || null}
         */
        this.TableBaseInfo = null;

        /**
         * The table fields.
         * @type {Array.<TColumn> || null}
         */
        this.Columns = null;

        /**
         * The table partitions.
         * @type {Array.<TPartition> || null}
         */
        this.Partitions = null;

        /**
         * The table properties.
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

        /**
         * The Upsert key for a v2 table (in Upsert mode).
         * @type {Array.<string> || null}
         */
        this.UpsertKeys = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TableBaseInfo) {
            let obj = new TableBaseInfo();
            obj.deserialize(params.TableBaseInfo)
            this.TableBaseInfo = obj;
        }

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new TColumn();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new TPartition();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }
        this.UpsertKeys = 'UpsertKeys' in params ? params.UpsertKeys : null;

    }
}

/**
 * DescribeUserType request structure.
 * @class
 */
class DescribeUserTypeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID (UIN). If it is not specified, it will be the sub-UIN of the caller by default.
         * @type {string || null}
         */
        this.UserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;

    }
}

/**
 * SwitchDataEngine response structure.
 * @class
 */
class SwitchDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CheckDataEngineConfigPairsValidity request structure.
 * @class
 */
class CheckDataEngineConfigPairsValidityRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the minor version of the engine
         * @type {string || null}
         */
        this.ChildImageVersionId = null;

        /**
         * User-defined parameters
         * @type {Array.<DataEngineConfigPair> || null}
         */
        this.DataEngineConfigPairs = null;

        /**
         * ID of the major version of the engine. If there is the ID of the minor version, only the ID of the minor version needs to be input. If not, the latest ID of the minor version under the major version will be acquired.
         * @type {string || null}
         */
        this.ImageVersionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ChildImageVersionId = 'ChildImageVersionId' in params ? params.ChildImageVersionId : null;

        if (params.DataEngineConfigPairs) {
            this.DataEngineConfigPairs = new Array();
            for (let z in params.DataEngineConfigPairs) {
                let obj = new DataEngineConfigPair();
                obj.deserialize(params.DataEngineConfigPairs[z]);
                this.DataEngineConfigPairs.push(obj);
            }
        }
        this.ImageVersionId = 'ImageVersionId' in params ? params.ImageVersionId : null;

    }
}

/**
 * Bind fusion bucket information
 * @class
 */
class MountPointAssociates extends  AbstractModel {
    constructor(){
        super();

        /**
         * Bucket ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BucketId = null;

        /**
         * vpcId
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcCidrBlock = null;

        /**
         * Permission group ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessGroupId = null;

        /**
         * Permission rule ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AccessRuleId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BucketId = 'BucketId' in params ? params.BucketId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpcCidrBlock = 'VpcCidrBlock' in params ? params.VpcCidrBlock : null;
        this.AccessGroupId = 'AccessGroupId' in params ? params.AccessGroupId : null;
        this.AccessRuleId = 'AccessRuleId' in params ? params.AccessRuleId : null;

    }
}

/**
 * DescribeLakeFsInfo request structure.
 * @class
 */
class DescribeLakeFsInfoRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * Query table information object
 * @class
 */
class DLCTable extends  AbstractModel {
    constructor(){
        super();

        /**
         * Basic information of the data table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {TableBaseInfo || null}
         */
        this.TableBaseInfo = null;

        /**
         * Data table column information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TColumn> || null}
         */
        this.Columns = null;

        /**
         * Data table partition information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TPartition> || null}
         */
        this.Partitions = null;

        /**
         * Data storage path
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Location = null;

        /**
         * Data table attribute information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

        /**
         * Data table update information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModifiedTime = null;

        /**
         * Database creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Data format
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InputFormat = null;

        /**
         * Data storage size
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StorageSize = null;

        /**
         * Number of rows in the data table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RecordCount = null;

        /**
         * Materialized view name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MapMaterializedViewName = null;

        /**
         * Visit hot spots
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.HeatValue = null;

        /**
         * External table configuration information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ExternalDataConfiguration || null}
         */
        this.ExternalDataConfiguration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TableBaseInfo) {
            let obj = new TableBaseInfo();
            obj.deserialize(params.TableBaseInfo)
            this.TableBaseInfo = obj;
        }

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new TColumn();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new TPartition();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }
        this.Location = 'Location' in params ? params.Location : null;

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }
        this.ModifiedTime = 'ModifiedTime' in params ? params.ModifiedTime : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.InputFormat = 'InputFormat' in params ? params.InputFormat : null;
        this.StorageSize = 'StorageSize' in params ? params.StorageSize : null;
        this.RecordCount = 'RecordCount' in params ? params.RecordCount : null;
        this.MapMaterializedViewName = 'MapMaterializedViewName' in params ? params.MapMaterializedViewName : null;
        this.HeatValue = 'HeatValue' in params ? params.HeatValue : null;

        if (params.ExternalDataConfiguration) {
            let obj = new ExternalDataConfiguration();
            obj.deserialize(params.ExternalDataConfiguration)
            this.ExternalDataConfiguration = obj;
        }

    }
}

/**
 * ModifySparkApp request structure.
 * @class
 */
class ModifySparkAppRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Spark job name.
         * @type {string || null}
         */
        this.AppName = null;

        /**
         * The Spark job type. Valid values: `1` for Spark JAR job and `2` for Spark streaming job.
         * @type {number || null}
         */
        this.AppType = null;

        /**
         * The data engine executing the Spark job.
         * @type {string || null}
         */
        this.DataEngine = null;

        /**
         * The path of the Spark job package.
         * @type {string || null}
         */
        this.AppFile = null;

        /**
         * The data access policy (CAM role arn).
         * @type {number || null}
         */
        this.RoleArn = null;

        /**
         * The driver size. Valid values: `small` (default, 1 CU), `medium` (2 CUs), `large` (4 CUs), and `xlarge` (8 CUs).
         * @type {string || null}
         */
        this.AppDriverSize = null;

        /**
         * The executor size. Valid values: `small` (default, 1 CU), `medium` (2 CUs), `large` (4 CUs), and `xlarge` (8 CUs).
         * @type {string || null}
         */
        this.AppExecutorSize = null;

        /**
         * Number of Spark job executors
         * @type {number || null}
         */
        this.AppExecutorNums = null;

        /**
         * The Spark job ID.
         * @type {string || null}
         */
        this.SparkAppId = null;

        /**
         * This field has been disused. Use the `Datasource` field instead.
         * @type {string || null}
         */
        this.Eni = null;

        /**
         * The source of the Spark job package. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocal = null;

        /**
         * The main class of the Spark job.
         * @type {string || null}
         */
        this.MainClass = null;

        /**
         * Spark configurations separated by line break
         * @type {string || null}
         */
        this.AppConf = null;

        /**
         * The source of the dependency JAR packages of the Spark job. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalJars = null;

        /**
         * The dependency JAR packages of the Spark JAR job (JAR packages), separated by comma.
         * @type {string || null}
         */
        this.AppJars = null;

        /**
         * The source of the dependency files of the Spark job. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalFiles = null;

        /**
         * The dependency files of the Spark job (files other than JAR and ZIP packages), separated by comma.
         * @type {string || null}
         */
        this.AppFiles = null;

        /**
         * The source of the PySpark dependencies. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalPythonFiles = null;

        /**
         * The PySpark dependencies (Python files), separated by comma, with .py, .zip, and .egg formats supported.
         * @type {string || null}
         */
        this.AppPythonFiles = null;

        /**
         * The input parameters of the Spark job, separated by comma.
         * @type {string || null}
         */
        this.CmdArgs = null;

        /**
         * The maximum number of retries, valid for Spark streaming tasks only.
         * @type {number || null}
         */
        this.MaxRetries = null;

        /**
         * Data source name
         * @type {string || null}
         */
        this.DataSource = null;

        /**
         * The source of the dependency archives of the Spark job. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalArchives = null;

        /**
         * The dependency archives of the Spark job, separated by comma, with tar.gz, .tgz, and .tar formats supported.
         * @type {string || null}
         */
        this.AppArchives = null;

        /**
         * The Spark image version.
         * @type {string || null}
         */
        this.SparkImage = null;

        /**
         * The Spark image version name.
         * @type {string || null}
         */
        this.SparkImageVersion = null;

        /**
         * The specified executor count (max), which defaults to 1. This parameter applies if the "Dynamic" mode is selected. If the "Dynamic" mode is not selected, the executor count is equal to `AppExecutorNums`.
         * @type {number || null}
         */
        this.AppExecutorMaxNumbers = null;

        /**
         * The associated Data Lake Compute query script.
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * Whether to inherit the task resource configuration from the cluster configuration template. Valid values: `0` (default): No; `1`: Yes.
         * @type {number || null}
         */
        this.IsInherit = null;

        /**
         * Whether to run the task with the session SQLs. Valid values: `false` for no and `true` for yes.
         * @type {boolean || null}
         */
        this.IsSessionStarted = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AppName = 'AppName' in params ? params.AppName : null;
        this.AppType = 'AppType' in params ? params.AppType : null;
        this.DataEngine = 'DataEngine' in params ? params.DataEngine : null;
        this.AppFile = 'AppFile' in params ? params.AppFile : null;
        this.RoleArn = 'RoleArn' in params ? params.RoleArn : null;
        this.AppDriverSize = 'AppDriverSize' in params ? params.AppDriverSize : null;
        this.AppExecutorSize = 'AppExecutorSize' in params ? params.AppExecutorSize : null;
        this.AppExecutorNums = 'AppExecutorNums' in params ? params.AppExecutorNums : null;
        this.SparkAppId = 'SparkAppId' in params ? params.SparkAppId : null;
        this.Eni = 'Eni' in params ? params.Eni : null;
        this.IsLocal = 'IsLocal' in params ? params.IsLocal : null;
        this.MainClass = 'MainClass' in params ? params.MainClass : null;
        this.AppConf = 'AppConf' in params ? params.AppConf : null;
        this.IsLocalJars = 'IsLocalJars' in params ? params.IsLocalJars : null;
        this.AppJars = 'AppJars' in params ? params.AppJars : null;
        this.IsLocalFiles = 'IsLocalFiles' in params ? params.IsLocalFiles : null;
        this.AppFiles = 'AppFiles' in params ? params.AppFiles : null;
        this.IsLocalPythonFiles = 'IsLocalPythonFiles' in params ? params.IsLocalPythonFiles : null;
        this.AppPythonFiles = 'AppPythonFiles' in params ? params.AppPythonFiles : null;
        this.CmdArgs = 'CmdArgs' in params ? params.CmdArgs : null;
        this.MaxRetries = 'MaxRetries' in params ? params.MaxRetries : null;
        this.DataSource = 'DataSource' in params ? params.DataSource : null;
        this.IsLocalArchives = 'IsLocalArchives' in params ? params.IsLocalArchives : null;
        this.AppArchives = 'AppArchives' in params ? params.AppArchives : null;
        this.SparkImage = 'SparkImage' in params ? params.SparkImage : null;
        this.SparkImageVersion = 'SparkImageVersion' in params ? params.SparkImageVersion : null;
        this.AppExecutorMaxNumbers = 'AppExecutorMaxNumbers' in params ? params.AppExecutorMaxNumbers : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.IsInherit = 'IsInherit' in params ? params.IsInherit : null;
        this.IsSessionStarted = 'IsSessionStarted' in params ? params.IsSessionStarted : null;

    }
}

/**
 * CreateCHDFSBindingProduct response structure.
 * @class
 */
class CreateCHDFSBindingProductResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Binding information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MountPointAssociates> || null}
         */
        this.MountPointAssociates = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MountPointAssociates) {
            this.MountPointAssociates = new Array();
            for (let z in params.MountPointAssociates) {
                let obj = new MountPointAssociates();
                obj.deserialize(params.MountPointAssociates[z]);
                this.MountPointAssociates.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserInfo request structure.
 * @class
 */
class DescribeUserInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Type of queried information. Group: working group; DataAuth: data permission; EngineAuth: engine permission
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Filter criteria that are queried

When the type is Group, the fuzzy search is supported as the key is workgroup-name.

When the type is DataAuth, the keys supported are:

policy-type: types of permissions;

policy-source: data sources;

data-name: fuzzy search of the database and table.

When the type is EngineAuth, the keys supported are:

policy-type: types of permissions;

policy-source: data sources;

engine-name: fuzzy search of the database and table.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Sort fields.

When the type is Group, the create-time and group-name are supported.

When the type is DataAuth, create-time is supported.

When the type is EngineAuth, create-time is supported.
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * Sorting methods: desc means in order; asc means in reverse order; it is asc by default.
         * @type {string || null}
         */
        this.Sorting = null;

        /**
         * Quantity of returns. It is 20 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, which is 0 by default.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.SortBy = 'SortBy' in params ? params.SortBy : null;
        this.Sorting = 'Sorting' in params ? params.Sorting : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * VPC information of CHDFS products
 * @class
 */
class CHDFSProductVpcInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * vpc id

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * VPC name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * VPC subnet information list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<VpcCidrBlock> || null}
         */
        this.VpcCidrBlock = null;

        /**
         * Rule ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Permission group ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpcName = 'VpcName' in params ? params.VpcName : null;

        if (params.VpcCidrBlock) {
            this.VpcCidrBlock = new Array();
            for (let z in params.VpcCidrBlock) {
                let obj = new VpcCidrBlock();
                obj.deserialize(params.VpcCidrBlock[z]);
                this.VpcCidrBlock.push(obj);
            }
        }
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.AccessGroupId = 'AccessGroupId' in params ? params.AccessGroupId : null;

    }
}

/**
 * GenerateCreateMangedTableSql response structure.
 * @class
 */
class GenerateCreateMangedTableSqlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The SQL statements for creating the managed internal table.
         * @type {Execution || null}
         */
        this.Execution = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Execution) {
            let obj = new Execution();
            obj.deserialize(params.Execution)
            this.Execution = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Partial information about working groups
 * @class
 */
class WorkGroupMessage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the working group
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Working group name
         * @type {string || null}
         */
        this.WorkGroupName = null;

        /**
         * Working group description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WorkGroupDescription = null;

        /**
         * Creator
         * @type {string || null}
         */
        this.Creator = null;

        /**
         * The creation time of the working group, e.g. at 16:19:32 on Jul 28, 2021
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.WorkGroupName = 'WorkGroupName' in params ? params.WorkGroupName : null;
        this.WorkGroupDescription = 'WorkGroupDescription' in params ? params.WorkGroupDescription : null;
        this.Creator = 'Creator' in params ? params.Creator : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * UpdateDataEngineConfig response structure.
 * @class
 */
class UpdateDataEngineConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Collection of IDs of users bound to the same working group
 * @class
 */
class UserIdSetOfWorkGroupId extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group IDs
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * User ID which matches the Uin on the CAM side
         * @type {Array.<string> || null}
         */
        this.UserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.UserIds = 'UserIds' in params ? params.UserIds : null;

    }
}

/**
 * DMask policy information.
 * @class
 */
class DataMaskStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Policy ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StrategyId = null;

        /**
         * User AppId

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserAppId = null;

        /**
         * User UIN

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Specifies the uin of the user sub-account to operate.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubAccountUin = null;

        /**
         * Policy name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StrategyName = null;

        /**
         * MASK_SHOW_FIRST_4, MASK_SHOW_LAST_4, MASK_HASH, MASK_DATE_SHOW_YEAR, MASK_NULL, MASK_DEFAULT.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StrategyType = null;

        /**
         * Policy description

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StrategyDesc = null;

        /**
         * User group policy list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<GroupInfo> || null}
         */
        this.Groups = null;

        /**
         * User sub-account uin list, concatenated by ;.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Users = null;

        /**
         * 1: in effect; 0: deleted.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.State = null;

        /**
         * Policy creation time. timestamp in milliseconds.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Policy update time. timestamp in milliseconds.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StrategyId = 'StrategyId' in params ? params.StrategyId : null;
        this.UserAppId = 'UserAppId' in params ? params.UserAppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;
        this.StrategyName = 'StrategyName' in params ? params.StrategyName : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;
        this.StrategyDesc = 'StrategyDesc' in params ? params.StrategyDesc : null;

        if (params.Groups) {
            this.Groups = new Array();
            for (let z in params.Groups) {
                let obj = new GroupInfo();
                obj.deserialize(params.Groups[z]);
                this.Groups.push(obj);
            }
        }
        this.Users = 'Users' in params ? params.Users : null;
        this.State = 'State' in params ? params.State : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * DescribeAdvancedStoreLocation response structure.
 * @class
 */
class DescribeAdvancedStoreLocationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to enable advanced settings. 0 means no while 1 means yes.
         * @type {number || null}
         */
        this.Enable = null;

        /**
         * COS path of saving querying results
         * @type {string || null}
         */
        this.StoreLocation = null;

        /**
         * Whether there is permission for managed storage
         * @type {boolean || null}
         */
        this.HasLakeFs = null;

        /**
         * Managed storage status. The value is meaningful only when HasLakeFs is equal to true.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LakeFsStatus = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Enable = 'Enable' in params ? params.Enable : null;
        this.StoreLocation = 'StoreLocation' in params ? params.StoreLocation : null;
        this.HasLakeFs = 'HasLakeFs' in params ? params.HasLakeFs : null;
        this.LakeFsStatus = 'LakeFsStatus' in params ? params.LakeFsStatus : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTablesName response structure.
 * @class
 */
class DescribeTablesNameResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Object list of data table names
         * @type {Array.<string> || null}
         */
        this.TableNameList = null;

        /**
         * Total instances
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TableNameList = 'TableNameList' in params ? params.TableNameList : null;
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAdvancedStoreLocation request structure.
 * @class
 */
class DescribeAdvancedStoreLocationRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * UpdateDataEngine request structure.
 * @class
 */
class UpdateDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource size
         * @type {number || null}
         */
        this.Size = null;

        /**
         * Minimum CU resource
         * @type {number || null}
         */
        this.MinClusters = null;

        /**
         * Maximum CU resource
         * @type {number || null}
         */
        this.MaxClusters = null;

        /**
         * Enable the auto-refresh. True means that it is enabled while false means that it is disabled (by default).
         * @type {boolean || null}
         */
        this.AutoResume = null;

        /**
         * Data engine name
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Related information
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Whether to automatically suspend the cluster. False means no (by default) while true means yes.
         * @type {boolean || null}
         */
        this.AutoSuspend = null;

        /**
         * Scheduling policy of starting and ending the cluster: 0 (by default) indicates disabling the scheduling policy; 1 indicates enabling the scheduling policy. (Note: The scheduling policy and the automatic suspension policy are mutually exclusive.)
         * @type {number || null}
         */
        this.CrontabResumeSuspend = null;

        /**
         * Scheduling policy for the start and end; the complex type includes start and end time and the cluster suspension policy.
         * @type {CrontabResumeSuspendStrategy || null}
         */
        this.CrontabResumeSuspendStrategy = null;

        /**
         * The maximum number of concurrent tasks for a single cluster, which is 5 by default.
         * @type {number || null}
         */
        this.MaxConcurrency = null;

        /**
         * Tolerable queuing time, and it is 0 by default. When the queuing time for tasks exceeds the tolerable time, it may trigger scale-out. If this parameter is 0, it means that scale-out may be triggered immediately once tasks start queuing.
         * @type {number || null}
         */
        this.TolerableQueueTime = null;

        /**
         * Cluster automatic suspension time
         * @type {number || null}
         */
        this.AutoSuspendTime = null;

        /**
         * Whether the AS of the spark jar monthly subscription cluster is enabled
         * @type {boolean || null}
         */
        this.ElasticSwitch = null;

        /**
         * Upper limit of the spark jar monthly subscription cluster elastic scaling
         * @type {number || null}
         */
        this.ElasticLimit = null;

        /**
         * Session resource configuration template of Spark batch job clusters
         * @type {SessionResourceTemplate || null}
         */
        this.SessionResourceTemplate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Size = 'Size' in params ? params.Size : null;
        this.MinClusters = 'MinClusters' in params ? params.MinClusters : null;
        this.MaxClusters = 'MaxClusters' in params ? params.MaxClusters : null;
        this.AutoResume = 'AutoResume' in params ? params.AutoResume : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.AutoSuspend = 'AutoSuspend' in params ? params.AutoSuspend : null;
        this.CrontabResumeSuspend = 'CrontabResumeSuspend' in params ? params.CrontabResumeSuspend : null;

        if (params.CrontabResumeSuspendStrategy) {
            let obj = new CrontabResumeSuspendStrategy();
            obj.deserialize(params.CrontabResumeSuspendStrategy)
            this.CrontabResumeSuspendStrategy = obj;
        }
        this.MaxConcurrency = 'MaxConcurrency' in params ? params.MaxConcurrency : null;
        this.TolerableQueueTime = 'TolerableQueueTime' in params ? params.TolerableQueueTime : null;
        this.AutoSuspendTime = 'AutoSuspendTime' in params ? params.AutoSuspendTime : null;
        this.ElasticSwitch = 'ElasticSwitch' in params ? params.ElasticSwitch : null;
        this.ElasticLimit = 'ElasticLimit' in params ? params.ElasticLimit : null;

        if (params.SessionResourceTemplate) {
            let obj = new SessionResourceTemplate();
            obj.deserialize(params.SessionResourceTemplate)
            this.SessionResourceTemplate = obj;
        }

    }
}

/**
 * DescribeSparkAppJob request structure.
 * @class
 */
class DescribeSparkAppJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Spark job ID. If it co-exists with `JobName`, `JobName` is invalid. At least `JobId` or `JobName` must be used.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Spark job name
         * @type {string || null}
         */
        this.JobName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.JobName = 'JobName' in params ? params.JobName : null;

    }
}

/**
 * DescribeDLCTableList request structure.
 * @class
 */
class DescribeDLCTableListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Catalog name
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Query the list's filter criteria.
         * @type {Filter || null}
         */
        this.Filters = null;

        /**
         * Table type
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Pagination parameters
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination parameters
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Sorting fields
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * Sorting rules: true for ascending order; false for descending order
         * @type {boolean || null}
         */
        this.Asc = null;

        /**
         * Data format type: hive, iceberg, etc.
         * @type {string || null}
         */
        this.TableFormat = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;

        if (params.Filters) {
            let obj = new Filter();
            obj.deserialize(params.Filters)
            this.Filters = obj;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Asc = 'Asc' in params ? params.Asc : null;
        this.TableFormat = 'TableFormat' in params ? params.TableFormat : null;

    }
}

/**
 * DeleteDataMaskStrategy response structure.
 * @class
 */
class DeleteDataMaskStrategyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTasks request structure.
 * @class
 */
class DescribeTasksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of returned results. Default value: 10. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter. The following filters are supported, and the `Name` input parameter must be one of them. Up to 50 `task-id` values can be filtered, while up to 5 other parameters can be filtered in total.
task-id - String - (filter by task ID). `task-id` format: e386471f-139a-4e59-877f-50ece8135b99.
task-state - String - (filter exactly by task status). Valid values: `0` (initial), `1` (running), `2` (succeeded), `-1` (failed).
task-sql-keyword - String - (filter fuzzily by SQL statement keyword, such as `DROP TABLE`).
task-operator- string (filter by sub-UIN)
task-kind - string (filter by task type)
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Sorting field. Valid values: `create-time` (default value), `update-time`.
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * Sorting order. Valid values: `asc` (ascending order), `desc` (descending order). Default value: `asc`.
         * @type {string || null}
         */
        this.Sorting = null;

        /**
         * Start time in the format of `yyyy-mm-dd HH:MM:SS`, which is the current time seven days ago by default.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time in the format of `yyyy-mm-dd HH:MM:SS`, which is the current time by default. The time span is (0, 30] days. Data in the last 45 days can be queried.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The data engine name for filtering.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Resource group name of the spark engine
         * @type {string || null}
         */
        this.ResourceGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.SortBy = 'SortBy' in params ? params.SortBy : null;
        this.Sorting = 'Sorting' in params ? params.Sorting : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.ResourceGroupName = 'ResourceGroupName' in params ? params.ResourceGroupName : null;

    }
}

/**
 * CreateSparkAppTask request structure.
 * @class
 */
class CreateSparkAppTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Spark job name
         * @type {string || null}
         */
        this.JobName = null;

        /**
         * The input parameters of the Spark job, separated by space. They are generally used for periodic calls.
         * @type {string || null}
         */
        this.CmdArgs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobName = 'JobName' in params ? params.JobName : null;
        this.CmdArgs = 'CmdArgs' in params ? params.CmdArgs : null;

    }
}

/**
 * ModifySparkAppBatch response structure.
 * @class
 */
class ModifySparkAppBatchResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserType response structure.
 * @class
 */
class DescribeUserTypeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Types of users. ADMIN: administrators; COMMON: general users
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserType = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserType = 'UserType' in params ? params.UserType : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteWorkGroup request structure.
 * @class
 */
class DeleteWorkGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Collection of IDs of working groups to be deleted
         * @type {Array.<number> || null}
         */
        this.WorkGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupIds = 'WorkGroupIds' in params ? params.WorkGroupIds : null;

    }
}

/**
 * Configuration format
 * @class
 */
class KVPair extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configured key
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Configured value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * QueryResult response structure.
 * @class
 */
class QueryResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Result data
         * @type {string || null}
         */
        this.ResultSet = null;

        /**
         * schema
         * @type {Array.<Column> || null}
         */
        this.ResultSchema = null;

        /**
         * Pagination information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NextToken = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.ResultSet = 'ResultSet' in params ? params.ResultSet : null;

        if (params.ResultSchema) {
            this.ResultSchema = new Array();
            for (let z in params.ResultSchema) {
                let obj = new Column();
                obj.deserialize(params.ResultSchema[z]);
                this.ResultSchema.push(obj);
            }
        }
        this.NextToken = 'NextToken' in params ? params.NextToken : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CheckDataEngineImageCanBeUpgrade response structure.
 * @class
 */
class CheckDataEngineImageCanBeUpgradeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the minor version of the cluster image that can be updated under the major version
         * @type {string || null}
         */
        this.ChildImageVersionId = null;

        /**
         * Whether it can be updated
         * @type {boolean || null}
         */
        this.IsUpgrade = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ChildImageVersionId = 'ChildImageVersionId' in params ? params.ChildImageVersionId : null;
        this.IsUpgrade = 'IsUpgrade' in params ? params.IsUpgrade : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachUserPolicy request structure.
 * @class
 */
class AttachUserPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID, which is the same as the sub-user UIN. The CreateUser API is needed to create a user at first. The DescribeUsers API can be used for viewing.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Collection of authentication policies
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }

    }
}

/**
 * CreateInternalTable request structure.
 * @class
 */
class CreateInternalTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The basic table information.
         * @type {TableBaseInfo || null}
         */
        this.TableBaseInfo = null;

        /**
         * The table fields.
         * @type {Array.<TColumn> || null}
         */
        this.Columns = null;

        /**
         * The table partitions.
         * @type {Array.<TPartition> || null}
         */
        this.Partitions = null;

        /**
         * The table properties.
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TableBaseInfo) {
            let obj = new TableBaseInfo();
            obj.deserialize(params.TableBaseInfo)
            this.TableBaseInfo = obj;
        }

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new TColumn();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new TPartition();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }

    }
}

/**
 * Resource basic information
 * @class
 */
class ResourceBaseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Catalog name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Schema name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Schema = null;

        /**
         * Table name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Table = null;

        /**
         * View name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.View = null;

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Function name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Function = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.Schema = 'Schema' in params ? params.Schema : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.View = 'View' in params ? params.View : null;
        this.Database = 'Database' in params ? params.Database : null;
        this.Function = 'Function' in params ? params.Function : null;

    }
}

/**
 * DeleteThirdPartyAccessUser request structure.
 * @class
 */
class DeleteThirdPartyAccessUserRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeTaskStatistics request structure.
 * @class
 */
class DescribeTaskStatisticsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * AttachWorkGroupPolicy request structure.
 * @class
 */
class AttachWorkGroupPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group IDs
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Collection of policies to be bound
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }

    }
}

/**
 * ModifyAdvancedStoreLocation request structure.
 * @class
 */
class ModifyAdvancedStoreLocationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * COS path for saving querying results
         * @type {string || null}
         */
        this.StoreLocation = null;

        /**
         * Whether to enable advanced settings. 0 means no while 1 means yes.
         * @type {number || null}
         */
        this.Enable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StoreLocation = 'StoreLocation' in params ? params.StoreLocation : null;
        this.Enable = 'Enable' in params ? params.Enable : null;

    }
}

/**
 * DescribeDataEnginesScaleDetail response structure.
 * @class
 */
class DescribeDataEnginesScaleDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Details about the statistics of engine specifications
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DataEngineScaleInfo> || null}
         */
        this.Scales = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Scales) {
            this.Scales = new Array();
            for (let z in params.Scales) {
                let obj = new DataEngineScaleInfo();
                obj.deserialize(params.Scales[z]);
                this.Scales.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateUser response structure.
 * @class
 */
class CreateUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDataEngine response structure.
 * @class
 */
class DescribeDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data engine details
         * @type {DataEngineInfo || null}
         */
        this.DataEngine = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DataEngine) {
            let obj = new DataEngineInfo();
            obj.deserialize(params.DataEngine)
            this.DataEngine = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RevokeDLCCatalogAccess response structure.
 * @class
 */
class RevokeDLCCatalogAccessResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteCHDFSBindingProduct request structure.
 * @class
 */
class DeleteCHDFSBindingProductRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Names of metadata acceleration buckets to be unbound
         * @type {string || null}
         */
        this.MountPoint = null;

        /**
         * Types of buckets which are divided into cos and lakefs
         * @type {string || null}
         */
        this.BucketType = null;

        /**
         * Product name
         * @type {string || null}
         */
        this.ProductName = null;

        /**
         * Engine name. When ProductName selects DLC products, this parameter must be specified. When ProductName selects other products, it can be unspecified.
         * @type {string || null}
         */
        this.EngineName = null;

        /**
         * VPC information. When ProductName is other, this parameter must be specified.
         * @type {Array.<VpcInfo> || null}
         */
        this.VpcInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MountPoint = 'MountPoint' in params ? params.MountPoint : null;
        this.BucketType = 'BucketType' in params ? params.BucketType : null;
        this.ProductName = 'ProductName' in params ? params.ProductName : null;
        this.EngineName = 'EngineName' in params ? params.EngineName : null;

        if (params.VpcInfo) {
            this.VpcInfo = new Array();
            for (let z in params.VpcInfo) {
                let obj = new VpcInfo();
                obj.deserialize(params.VpcInfo[z]);
                this.VpcInfo.push(obj);
            }
        }

    }
}

/**
 * UpdateDataEngine response structure.
 * @class
 */
class UpdateDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTaskStatistics response structure.
 * @class
 */
class DescribeTaskStatisticsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task statistics information.
         * @type {StatisticInfo || null}
         */
        this.StatisticInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.StatisticInfo) {
            let obj = new StatisticInfo();
            obj.deserialize(params.StatisticInfo)
            this.StatisticInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteUser response structure.
 * @class
 */
class DeleteUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Running logs of a Spark SQL batch job
 * @class
 */
class SparkSessionBatchLog extends  AbstractModel {
    constructor(){
        super();

        /**
         * The log step. Valid values: `BEG`, `CS`, `DS`, `DSS`, `DSF`, `FINF`, `RTO`, `CANCEL`, `CT`, `DT`, `DTS`, `DTF`, `FINT`, and `EXCE`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Step = null;

        /**
         * Time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Time = null;

        /**
         * The log message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The operation.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<SparkSessionBatchLogOperate> || null}
         */
        this.Operate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Step = 'Step' in params ? params.Step : null;
        this.Time = 'Time' in params ? params.Time : null;
        this.Message = 'Message' in params ? params.Message : null;

        if (params.Operate) {
            this.Operate = new Array();
            for (let z in params.Operate) {
                let obj = new SparkSessionBatchLogOperate();
                obj.deserialize(params.Operate[z]);
                this.Operate.push(obj);
            }
        }

    }
}

/**
 * DescribeEngineUsageInfo request structure.
 * @class
 */
class DescribeEngineUsageInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The data engine ID.
         * @type {string || null}
         */
        this.DataEngineId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;

    }
}

/**
 * SmartOptimizerWrittenPolicy
 * @class
 */
class SmartOptimizerWrittenPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * none/enable/disable/default
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WrittenEnable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WrittenEnable = 'WrittenEnable' in params ? params.WrittenEnable : null;

    }
}

/**
 * Table partition information
 * @class
 */
class TPartition extends  AbstractModel {
    constructor(){
        super();

        /**
         * The field name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * The field type.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * The field description.
         * @type {string || null}
         */
        this.Comment = null;

        /**
         * The partition type.
         * @type {string || null}
         */
        this.PartitionType = null;

        /**
         * The partition format.
         * @type {string || null}
         */
        this.PartitionFormat = null;

        /**
         * The separator count of the partition conversion policy.
         * @type {number || null}
         */
        this.PartitionDot = null;

        /**
         * The partition conversion policy.
         * @type {string || null}
         */
        this.Transform = null;

        /**
         * The policy parameters.
         * @type {Array.<string> || null}
         */
        this.TransformArgs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Comment = 'Comment' in params ? params.Comment : null;
        this.PartitionType = 'PartitionType' in params ? params.PartitionType : null;
        this.PartitionFormat = 'PartitionFormat' in params ? params.PartitionFormat : null;
        this.PartitionDot = 'PartitionDot' in params ? params.PartitionDot : null;
        this.Transform = 'Transform' in params ? params.Transform : null;
        this.TransformArgs = 'TransformArgs' in params ? params.TransformArgs : null;

    }
}

/**
 * DescribeForbiddenTablePro request structure.
 * @class
 */
class DescribeForbiddenTableProRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * CreateDataEngine response structure.
 * @class
 */
class CreateDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the virtual engine.
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * VPC information
 * @class
 */
class VpcInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * vpc Id
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * VPC subnet
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcCidrBlock = null;

        /**
         * Rule ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RuleId = null;

        /**
         * Permission group ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpcCidrBlock = 'VpcCidrBlock' in params ? params.VpcCidrBlock : null;
        this.RuleId = 'RuleId' in params ? params.RuleId : null;
        this.AccessGroupId = 'AccessGroupId' in params ? params.AccessGroupId : null;

    }
}

/**
 * DescribeSparkAppJobs request structure.
 * @class
 */
class DescribeSparkAppJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The returned results are sorted by this field.
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * Descending or ascending order, such as `desc`.
         * @type {string || null}
         */
        this.Sorting = null;

        /**
         * The filters. The following types are supported, and `Name` of the parameter passed in must be one of them: `spark-job-name` (job name), `spark-job-id` (job ID), `spark-app-type` (job type: `1` for batch, `2` for streaming, and `4` for SQL), `user-name` (creator), and `key-word` (job name or ID keywords for fuzzy search).
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The update start time in the format of yyyy-mm-dd HH:MM:SS.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The update end time in the format of yyyy-mm-dd HH:MM:SS.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The query list offset, which defaults to 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The maximum number of queries allowed in the list, which defaults to 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SortBy = 'SortBy' in params ? params.SortBy : null;
        this.Sorting = 'Sorting' in params ? params.Sorting : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Permission information
 * @class
 */
class PermissionResponseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Permission type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessType = null;

        /**
         * Resource information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResourceBaseInfo || null}
         */
        this.ResourceBaseInfo = null;

        /**
         * Authentication result
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Allowed = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AccessType = 'AccessType' in params ? params.AccessType : null;

        if (params.ResourceBaseInfo) {
            let obj = new ResourceBaseInfo();
            obj.deserialize(params.ResourceBaseInfo)
            this.ResourceBaseInfo = obj;
        }
        this.Allowed = 'Allowed' in params ? params.Allowed : null;

    }
}

/**
 * DescribeJobs response structure.
 * @class
 */
class DescribeJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of job information
         * @type {Array.<JobResponseInfo> || null}
         */
        this.JobList = null;

        /**
         * Statistics
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.JobList) {
            this.JobList = new Array();
            for (let z in params.JobList) {
                let obj = new JobResponseInfo();
                obj.deserialize(params.JobList[z]);
                this.JobList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDataEngine request structure.
 * @class
 */
class DescribeDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * House name
         * @type {string || null}
         */
        this.DataEngineName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;

    }
}

/**
 * DMask policy information.
 * @class
 */
class DataMaskStrategyInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Policy name
         * @type {string || null}
         */
        this.StrategyName = null;

        /**
         * MASK_SHOW_FIRST_4, MASK_SHOW_LAST_4, MASK_HASH, MASK_DATE_SHOW_YEAR, MASK_NULL, MASK_DEFAULT.
         * @type {string || null}
         */
        this.StrategyType = null;

        /**
         * Policy description
         * @type {string || null}
         */
        this.StrategyDesc = null;

        /**
         * User group policy list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<GroupInfo> || null}
         */
        this.Groups = null;

        /**
         * User sub-account uin list, concatenated by ;.
         * @type {string || null}
         */
        this.Users = null;

        /**
         * Policy ID
         * @type {string || null}
         */
        this.StrategyId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StrategyName = 'StrategyName' in params ? params.StrategyName : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;
        this.StrategyDesc = 'StrategyDesc' in params ? params.StrategyDesc : null;

        if (params.Groups) {
            this.Groups = new Array();
            for (let z in params.Groups) {
                let obj = new GroupInfo();
                obj.deserialize(params.Groups[z]);
                this.Groups.push(obj);
            }
        }
        this.Users = 'Users' in params ? params.Users : null;
        this.StrategyId = 'StrategyId' in params ? params.StrategyId : null;

    }
}

/**
 * DMask user group information.
 * @class
 */
class GroupInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User group ID.
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Policy type.
         * @type {string || null}
         */
        this.StrategyType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;

    }
}

/**
 * RollbackDataEngineImage response structure.
 * @class
 */
class RollbackDataEngineImageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * QueryResult request structure.
 * @class
 */
class QueryResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * lastReadFile is the file read last time. lastReadOffset is where the read stopped.
         * @type {string || null}
         */
        this.NextToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.NextToken = 'NextToken' in params ? params.NextToken : null;

    }
}

/**
 * Describe basic information about DLC managed storage
 * @class
 */
class LakeFsInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Managed storage name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Managed storage type
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Capacity
         * @type {number || null}
         */
        this.SpaceUsedSize = null;

        /**
         * Timestamp of the creation time
         * @type {number || null}
         */
        this.CreateTimeStamp = null;

        /**
         * Whether it is the user's default bucket: 0: default bucket, 1: non-default bucket
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DefaultBucket = null;

        /**
         * Managed storage short name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ShortName = null;

        /**
         * Description information of the bucket
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The status of the managed bucket. Current values: creating, bind, readOnly, and isolate
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.SpaceUsedSize = 'SpaceUsedSize' in params ? params.SpaceUsedSize : null;
        this.CreateTimeStamp = 'CreateTimeStamp' in params ? params.CreateTimeStamp : null;
        this.DefaultBucket = 'DefaultBucket' in params ? params.DefaultBucket : null;
        this.ShortName = 'ShortName' in params ? params.ShortName : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * External table configuration
 * @class
 */
class ExternalDataConfiguration extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metadata storage object
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DMSSds || null}
         */
        this.Sds = null;

        /**
         * View text
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ViewOriginalText = null;

        /**
         * View text
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ViewExpandedText = null;

        /**
         * Hive maintenance version
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Retention = null;

        /**
         * Lifecycle
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.LifeTime = null;

        /**
         * Partition
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DMSPartition> || null}
         */
        this.Partitions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Sds) {
            let obj = new DMSSds();
            obj.deserialize(params.Sds)
            this.Sds = obj;
        }
        this.ViewOriginalText = 'ViewOriginalText' in params ? params.ViewOriginalText : null;
        this.ViewExpandedText = 'ViewExpandedText' in params ? params.ViewExpandedText : null;
        this.Retention = 'Retention' in params ? params.Retention : null;
        this.LifeTime = 'LifeTime' in params ? params.LifeTime : null;

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new DMSPartition();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }

    }
}

/**
 * CheckDataEngineImageCanBeRollback request structure.
 * @class
 */
class CheckDataEngineImageCanBeRollbackRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;

    }
}

/**
 * CreateDataEngine request structure.
 * @class
 */
class CreateDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The engine type. Valid values: `spark` and `presto`.
         * @type {string || null}
         */
        this.EngineType = null;

        /**
         * The name of the virtual cluster.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * The cluster type. Valid values: `spark_private`, `presto_private`, `presto_cu`, and `spark_cu`.
         * @type {string || null}
         */
        this.ClusterType = null;

        /**
         * The billing mode. Valid values: `0` (shared engine), `1` (pay-as-you-go), and `2` (monthly subscription).
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Whether to automatically start the clusters.
         * @type {boolean || null}
         */
        this.AutoResume = null;

        /**
         * The minimum number of clusters.
         * @type {number || null}
         */
        this.MinClusters = null;

        /**
         * The maximum number of clusters.
         * @type {number || null}
         */
        this.MaxClusters = null;

        /**
         * Whether the cluster is the default one.
         * @type {boolean || null}
         */
        this.DefaultDataEngine = null;

        /**
         * The VPC CIDR block.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * The description.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The cluster size.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * The pay mode. Valid value: `0` (postpaid, default) and `1` (prepaid) (currently not available).
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * The usage duration of the resource. Postpaid: Fill in 3,600 as a fixed figure; prepaid: fill in a figure equal to or bigger than 1 which means purchasing resources for one month. The maximum figure is not bigger than 120. The default value is 1.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * The unit of the resource period. Valid values: `s` (default) for the postpaid mode and `m` for the prepaid mode.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * The auto-renewal status of the resource. For the postpaid mode, no renewal is required, and the value is fixed to `0`. For the prepaid mode, valid values are `0` (manual), `1` (auto), and `2` (no renewal). If this parameter is set to `0` for a key account in the prepaid mode, auto-renewal applies. It defaults to `0`.
         * @type {number || null}
         */
        this.AutoRenew = null;

        /**
         * The tags to be set for the resource being created.
         * @type {Array.<TagInfo> || null}
         */
        this.Tags = null;

        /**
         * Whether to automatically suspend clusters. Valid values: `false` (default, no) and `true` (yes).
         * @type {boolean || null}
         */
        this.AutoSuspend = null;

        /**
         * Whether to enable scheduled start and suspension of clusters. Valid values: `0` (disable) and `1` (enable). Note: This policy and the auto-suspension policy are mutually exclusive.
         * @type {number || null}
         */
        this.CrontabResumeSuspend = null;

        /**
         * The complex policy for scheduled start and suspension, including the start/suspension time and suspension policy.
         * @type {CrontabResumeSuspendStrategy || null}
         */
        this.CrontabResumeSuspendStrategy = null;

        /**
         * The type of tasks to be executed by the engine, which defaults to SQL. Valid values: `SQL` and `BATCH`.
         * @type {string || null}
         */
        this.EngineExecType = null;

        /**
         * The max task concurrency of a cluster, which defaults to 5.
         * @type {number || null}
         */
        this.MaxConcurrency = null;

        /**
         * The task queue time limit, which defaults to 0. When the actual queue time exceeds the value set here, scale-out may be triggered. Setting this parameter to 0 represents that scale-out may be triggered immediately after a task queues up.
         * @type {number || null}
         */
        this.TolerableQueueTime = null;

        /**
         * The cluster auto-suspension time, which defaults to 10 min.
         * @type {number || null}
         */
        this.AutoSuspendTime = null;

        /**
         * The resource type. Valid values: `Standard_CU` (standard) and `Memory_CU` (memory).
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The advanced configurations of clusters.
         * @type {Array.<DataEngineConfigPair> || null}
         */
        this.DataEngineConfigPairs = null;

        /**
         * The version name of cluster image, such as SuperSQL-P 1.1 and SuperSQL-S 3.2. If no value is passed in, a cluster is created using the latest image version.
         * @type {string || null}
         */
        this.ImageVersionName = null;

        /**
         * The primary cluster, which is specified when a failover cluster is created.
         * @type {string || null}
         */
        this.MainClusterName = null;

        /**
         * Whether to enable the scaling feature for a monthly subscribed Spark job cluster.
         * @type {boolean || null}
         */
        this.ElasticSwitch = null;

        /**
         * The upper limit (in CUs) for scaling of the monthly subscribed Spark job cluster.
         * @type {number || null}
         */
        this.ElasticLimit = null;

        /**
         * The session resource configuration template for a Spark job cluster.
         * @type {SessionResourceTemplate || null}
         */
        this.SessionResourceTemplate = null;

        /**
         * Automatically grant permissions
         * @type {boolean || null}
         */
        this.AutoAuthorization = null;

        /**
         * Engine network ID
         * @type {string || null}
         */
        this.EngineNetworkId = null;

        /**
         * Generation of the engine. SuperSQL means the supersql engine while Native means the standard engine. It is SuperSQL by default.
         * @type {string || null}
         */
        this.EngineGeneration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EngineType = 'EngineType' in params ? params.EngineType : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.ClusterType = 'ClusterType' in params ? params.ClusterType : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.AutoResume = 'AutoResume' in params ? params.AutoResume : null;
        this.MinClusters = 'MinClusters' in params ? params.MinClusters : null;
        this.MaxClusters = 'MaxClusters' in params ? params.MaxClusters : null;
        this.DefaultDataEngine = 'DefaultDataEngine' in params ? params.DefaultDataEngine : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.AutoRenew = 'AutoRenew' in params ? params.AutoRenew : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new TagInfo();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.AutoSuspend = 'AutoSuspend' in params ? params.AutoSuspend : null;
        this.CrontabResumeSuspend = 'CrontabResumeSuspend' in params ? params.CrontabResumeSuspend : null;

        if (params.CrontabResumeSuspendStrategy) {
            let obj = new CrontabResumeSuspendStrategy();
            obj.deserialize(params.CrontabResumeSuspendStrategy)
            this.CrontabResumeSuspendStrategy = obj;
        }
        this.EngineExecType = 'EngineExecType' in params ? params.EngineExecType : null;
        this.MaxConcurrency = 'MaxConcurrency' in params ? params.MaxConcurrency : null;
        this.TolerableQueueTime = 'TolerableQueueTime' in params ? params.TolerableQueueTime : null;
        this.AutoSuspendTime = 'AutoSuspendTime' in params ? params.AutoSuspendTime : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;

        if (params.DataEngineConfigPairs) {
            this.DataEngineConfigPairs = new Array();
            for (let z in params.DataEngineConfigPairs) {
                let obj = new DataEngineConfigPair();
                obj.deserialize(params.DataEngineConfigPairs[z]);
                this.DataEngineConfigPairs.push(obj);
            }
        }
        this.ImageVersionName = 'ImageVersionName' in params ? params.ImageVersionName : null;
        this.MainClusterName = 'MainClusterName' in params ? params.MainClusterName : null;
        this.ElasticSwitch = 'ElasticSwitch' in params ? params.ElasticSwitch : null;
        this.ElasticLimit = 'ElasticLimit' in params ? params.ElasticLimit : null;

        if (params.SessionResourceTemplate) {
            let obj = new SessionResourceTemplate();
            obj.deserialize(params.SessionResourceTemplate)
            this.SessionResourceTemplate = obj;
        }
        this.AutoAuthorization = 'AutoAuthorization' in params ? params.AutoAuthorization : null;
        this.EngineNetworkId = 'EngineNetworkId' in params ? params.EngineNetworkId : null;
        this.EngineGeneration = 'EngineGeneration' in params ? params.EngineGeneration : null;

    }
}

/**
 * ModifySparkAppBatch request structure.
 * @class
 */
class ModifySparkAppBatchRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of the IDs of the Spark job tasks to be modified in batches.
         * @type {Array.<string> || null}
         */
        this.SparkAppId = null;

        /**
         * The engine ID.
         * @type {string || null}
         */
        this.DataEngine = null;

        /**
         * The driver size.
Valid values for the standard resource type: `small`, `medium`, `large`, and `xlarge`.
Valid values for the memory resource type: `m.small`, `m.medium`, `m.large`, and `m.xlarge`.
         * @type {string || null}
         */
        this.AppDriverSize = null;

        /**
         * The executor size.
Valid values for the standard resource type: `small`, `medium`, `large`, and `xlarge`.
Valid values for the memory resource type: `m.small`, `m.medium`, `m.large`, and `m.xlarge`.
         * @type {string || null}
         */
        this.AppExecutorSize = null;

        /**
         * The executor count. The minimum value is 1 and the maximum value is less than the cluster specification.
         * @type {number || null}
         */
        this.AppExecutorNums = null;

        /**
         * The maximum executor count (in dynamic configuration scenarios). The minimum value is 1 and the maximum value is less than the cluster specification. If you set `ExecutorMaxNumbers` to a value smaller than that of `ExecutorNums`, the value of `ExecutorMaxNumbers` is automatically changed to that of `ExecutorNums`.
         * @type {number || null}
         */
        this.AppExecutorMaxNumbers = null;

        /**
         * Whether to inherit the task resource configuration from the cluster template. Valid values: `0` (default): No; `1`: Yes.
         * @type {number || null}
         */
        this.IsInherit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SparkAppId = 'SparkAppId' in params ? params.SparkAppId : null;
        this.DataEngine = 'DataEngine' in params ? params.DataEngine : null;
        this.AppDriverSize = 'AppDriverSize' in params ? params.AppDriverSize : null;
        this.AppExecutorSize = 'AppExecutorSize' in params ? params.AppExecutorSize : null;
        this.AppExecutorNums = 'AppExecutorNums' in params ? params.AppExecutorNums : null;
        this.AppExecutorMaxNumbers = 'AppExecutorMaxNumbers' in params ? params.AppExecutorMaxNumbers : null;
        this.IsInherit = 'IsInherit' in params ? params.IsInherit : null;

    }
}

/**
 * DescribeSparkAppTasks request structure.
 * @class
 */
class DescribeSparkAppTasksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Spark job ID
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Paginated query offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Paginated query limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Execution instance ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The update start time in the format of yyyy-MM-dd HH:mm:ss.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The update end time in the format of yyyy-MM-dd HH:mm:ss.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Filter by this parameter, which can be `task-state`.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeDataEnginePythonSparkImages request structure.
 * @class
 */
class DescribeDataEnginePythonSparkImagesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the minor version of the cluster image
         * @type {string || null}
         */
        this.ChildImageVersionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ChildImageVersionId = 'ChildImageVersionId' in params ? params.ChildImageVersionId : null;

    }
}

/**
 * SmartOptimizerPolicy
 * @class
 */
class SmartOptimizerPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to inherit it
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Inherit = null;

        /**
         * ResourceInfo
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ResourceInfo> || null}
         */
        this.Resources = null;

        /**
         * SmartOptimizerWrittenPolicy
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SmartOptimizerWrittenPolicy || null}
         */
        this.Written = null;

        /**
         * SmartOptimizerLifecyclePolicy
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SmartOptimizerLifecyclePolicy || null}
         */
        this.Lifecycle = null;

        /**
         * SmartOptimizerIndexPolicy
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SmartOptimizerIndexPolicy || null}
         */
        this.Index = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Inherit = 'Inherit' in params ? params.Inherit : null;

        if (params.Resources) {
            this.Resources = new Array();
            for (let z in params.Resources) {
                let obj = new ResourceInfo();
                obj.deserialize(params.Resources[z]);
                this.Resources.push(obj);
            }
        }

        if (params.Written) {
            let obj = new SmartOptimizerWrittenPolicy();
            obj.deserialize(params.Written)
            this.Written = obj;
        }

        if (params.Lifecycle) {
            let obj = new SmartOptimizerLifecyclePolicy();
            obj.deserialize(params.Lifecycle)
            this.Lifecycle = obj;
        }

        if (params.Index) {
            let obj = new SmartOptimizerIndexPolicy();
            obj.deserialize(params.Index)
            this.Index = obj;
        }

    }
}

/**
 * CreateTask request structure.
 * @class
 */
class CreateTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Computing task. This parameter contains the task type and related configuration information.
         * @type {Task || null}
         */
        this.Task = null;

        /**
         * Database name. If there is a database name in the SQL statement, the database in the SQL statement will be used first; otherwise, the database specified by this parameter will be used (note: when submitting the database creation SQL statement, passed in an empty string for this field).
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Name of the default data source
         * @type {string || null}
         */
        this.DatasourceConnectionName = null;

        /**
         * Data engine name. If this parameter is not specified, the task will be submitted to the default engine.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Standard spark execution task resourceGroupName
         * @type {string || null}
         */
        this.ResourceGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Task) {
            let obj = new Task();
            obj.deserialize(params.Task)
            this.Task = obj;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.DatasourceConnectionName = 'DatasourceConnectionName' in params ? params.DatasourceConnectionName : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.ResourceGroupName = 'ResourceGroupName' in params ? params.ResourceGroupName : null;

    }
}

/**
 * RegisterThirdPartyAccessUser response structure.
 * @class
 */
class RegisterThirdPartyAccessUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySparkApp response structure.
 * @class
 */
class ModifySparkAppResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * FavorInfo
 * @class
 */
class FavorInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Prioritized items
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Catalog name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * DataBase name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataBase = null;

        /**
         * Table name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Table = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.DataBase = 'DataBase' in params ? params.DataBase : null;
        this.Table = 'Table' in params ? params.Table : null;

    }
}

/**
 * DescribeUserInfo response structure.
 * @class
 */
class DescribeUserInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Detailed user information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {UserDetailInfo || null}
         */
        this.UserInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserInfo) {
            let obj = new UserDetailInfo();
            obj.deserialize(params.UserInfo)
            this.UserInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserType request structure.
 * @class
 */
class ModifyUserTypeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Types that users modify. ADMIN: administrators; COMMON: general users.
         * @type {string || null}
         */
        this.UserType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserType = 'UserType' in params ? params.UserType : null;

    }
}

/**
 * DeleteDataMaskStrategy request structure.
 * @class
 */
class DeleteDataMaskStrategyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * DMask policy Id. specifies the Id of the data masking policy.
         * @type {string || null}
         */
        this.StrategyId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StrategyId = 'StrategyId' in params ? params.StrategyId : null;

    }
}

/**
 * RollbackDataEngineImage request structure.
 * @class
 */
class RollbackDataEngineImageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * FromRecordId parameters returned by the API for checking the availability of rolling back
         * @type {string || null}
         */
        this.FromRecordId = null;

        /**
         * ToRecordId parameters returned by the API for checking the availability of rolling back
         * @type {string || null}
         */
        this.ToRecordId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.FromRecordId = 'FromRecordId' in params ? params.FromRecordId : null;
        this.ToRecordId = 'ToRecordId' in params ? params.ToRecordId : null;

    }
}

/**
 * DescribeWorkGroups response structure.
 * @class
 */
class DescribeWorkGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The total number of working groups
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Collection of working group information
         * @type {Array.<WorkGroupInfo> || null}
         */
        this.WorkGroupSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.WorkGroupSet) {
            this.WorkGroupSet = new Array();
            for (let z in params.WorkGroupSet) {
                let obj = new WorkGroupInfo();
                obj.deserialize(params.WorkGroupSet[z]);
                this.WorkGroupSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUsers request structure.
 * @class
 */
class DescribeUsersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specify the UIN of the sub-user to be queried. Users need to create it through the CreateUser API.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Offset, which is 0 by default.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Quantity of returns. It is 20 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sorting fields, which support the following type: create-time
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * Sorting methods: desc means in order; asc means in reverse order; it is asc by default.
         * @type {string || null}
         */
        this.Sorting = null;

        /**
         * Filter criteria. The following filter types are supported. User-type means the filtering is based on the types of users, and user-keyword means the filtering is based on the names of users.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SortBy = 'SortBy' in params ? params.SortBy : null;
        this.Sorting = 'Sorting' in params ? params.Sorting : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeSparkSessionBatchSqlLog request structure.
 * @class
 */
class DescribeSparkSessionBatchSqlLogRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of a Spark SQL job.
         * @type {string || null}
         */
        this.BatchId = null;

        /**
         * User-defined primary key. If it is specified, the query should be based on the value.
         * @type {string || null}
         */
        this.CustomKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BatchId = 'BatchId' in params ? params.BatchId : null;
        this.CustomKey = 'CustomKey' in params ? params.CustomKey : null;

    }
}

/**
 * Properties of database and table
 * @class
 */
class Property extends  AbstractModel {
    constructor(){
        super();

        /**
         * The property key name.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * The property value.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * The task overview.
 * @class
 */
class TasksOverview extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of tasks in queue.
         * @type {number || null}
         */
        this.TaskQueuedCount = null;

        /**
         * The number of initialized tasks.
         * @type {number || null}
         */
        this.TaskInitCount = null;

        /**
         * The number of tasks in progress.
         * @type {number || null}
         */
        this.TaskRunningCount = null;

        /**
         * The total number of tasks in this time range.
         * @type {number || null}
         */
        this.TotalTaskCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskQueuedCount = 'TaskQueuedCount' in params ? params.TaskQueuedCount : null;
        this.TaskInitCount = 'TaskInitCount' in params ? params.TaskInitCount : null;
        this.TaskRunningCount = 'TaskRunningCount' in params ? params.TaskRunningCount : null;
        this.TotalTaskCount = 'TotalTaskCount' in params ? params.TotalTaskCount : null;

    }
}

/**
 * DescribeUpdatableDataEngines request structure.
 * @class
 */
class DescribeUpdatableDataEnginesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation commands of engine configuration. UpdateSparkSQLLakefsPath updates the path of managed tables, and UpdateSparkSQLResultPath updates the path of result buckets.
         * @type {string || null}
         */
        this.DataEngineConfigCommand = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.UseLakeFs = null;

        /**
         * 
         * @type {string || null}
         */
        this.CustomResultPath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineConfigCommand = 'DataEngineConfigCommand' in params ? params.DataEngineConfigCommand : null;
        this.UseLakeFs = 'UseLakeFs' in params ? params.UseLakeFs : null;
        this.CustomResultPath = 'CustomResultPath' in params ? params.CustomResultPath : null;

    }
}

/**
 * SQL statement objects
 * @class
 */
class Execution extends  AbstractModel {
    constructor(){
        super();

        /**
         * The automatically generated SQL statements.
         * @type {string || null}
         */
        this.SQL = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SQL = 'SQL' in params ? params.SQL : null;

    }
}

/**
 * DescribeDataMaskStrategies request structure.
 * @class
 */
class DescribeDataMaskStrategiesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The pagination parameter, specifies the amount of data returned per page. it is 10 by default.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination parameters. data offset. default: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter field. strategy-name: search by policy name.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * SmartOptimizerLifecyclePolicy
 * @class
 */
class SmartOptimizerLifecyclePolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Enable the lifecycle
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LifecycleEnable = null;

        /**
         * Expiration time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Expiration = null;

        /**
         * Whether to delete the table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.DropTable = null;

        /**
         * Expired fields
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpiredField = null;

        /**
         * Expired field format
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpiredFieldFormat = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleEnable = 'LifecycleEnable' in params ? params.LifecycleEnable : null;
        this.Expiration = 'Expiration' in params ? params.Expiration : null;
        this.DropTable = 'DropTable' in params ? params.DropTable : null;
        this.ExpiredField = 'ExpiredField' in params ? params.ExpiredField : null;
        this.ExpiredFieldFormat = 'ExpiredFieldFormat' in params ? params.ExpiredFieldFormat : null;

    }
}

/**
 * DeleteUsersFromWorkGroup response structure.
 * @class
 */
class DeleteUsersFromWorkGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AddUsersToWorkGroup request structure.
 * @class
 */
class AddUsersToWorkGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information about working groups and users to be operated
         * @type {UserIdSetOfWorkGroupId || null}
         */
        this.AddInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddInfo) {
            let obj = new UserIdSetOfWorkGroupId();
            obj.deserialize(params.AddInfo)
            this.AddInfo = obj;
        }

    }
}

/**
 * DescribeStoreLocation request structure.
 * @class
 */
class DescribeStoreLocationRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * CreateDataMaskStrategy request structure.
 * @class
 */
class CreateDataMaskStrategyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Masking policy description.
         * @type {DataMaskStrategyInfo || null}
         */
        this.Strategy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Strategy) {
            let obj = new DataMaskStrategyInfo();
            obj.deserialize(params.Strategy)
            this.Strategy = obj;
        }

    }
}

/**
 * DescribeDLCCatalogAccess response structure.
 * @class
 */
class DescribeDLCCatalogAccessResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of the permissions granted by DLCCatalog
         * @type {Array.<DLCCatalogAccess> || null}
         */
        this.Rows = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Rows) {
            this.Rows = new Array();
            for (let z in params.Rows) {
                let obj = new DLCCatalogAccess();
                obj.deserialize(params.Rows[z]);
                this.Rows.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AddUsersToWorkGroup response structure.
 * @class
 */
class AddUsersToWorkGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateResultDownload response structure.
 * @class
 */
class CreateResultDownloadResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The download task ID.
         * @type {string || null}
         */
        this.DownloadId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DownloadId = 'DownloadId' in params ? params.DownloadId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserRoles response structure.
 * @class
 */
class DescribeUserRolesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The total number of user roles meeting the enumeration conditions.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The user roles.
         * @type {Array.<UserRole> || null}
         */
        this.UserRoles = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.UserRoles) {
            this.UserRoles = new Array();
            for (let z in params.UserRoles) {
                let obj = new UserRole();
                obj.deserialize(params.UserRoles[z]);
                this.UserRoles.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeJob response structure.
 * @class
 */
class DescribeJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job name
         * @type {string || null}
         */
        this.JobName = null;

        /**
         * Task statistics information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {StatisticInfo || null}
         */
        this.StatisticInfo = null;

        /**
         * Job configuration
         * @type {string || null}
         */
        this.JobConfiguration = null;

        /**
         * Job status:
         * @type {number || null}
         */
        this.JobStatus = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobName = 'JobName' in params ? params.JobName : null;

        if (params.StatisticInfo) {
            let obj = new StatisticInfo();
            obj.deserialize(params.StatisticInfo)
            this.StatisticInfo = obj;
        }
        this.JobConfiguration = 'JobConfiguration' in params ? params.JobConfiguration : null;
        this.JobStatus = 'JobStatus' in params ? params.JobStatus : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GetOptimizerPolicy request structure.
 * @class
 */
class GetOptimizerPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Policy description
         * @type {SmartPolicy || null}
         */
        this.SmartPolicy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SmartPolicy) {
            let obj = new SmartPolicy();
            obj.deserialize(params.SmartPolicy)
            this.SmartPolicy = obj;
        }

    }
}

/**
 * Collection of user information
 * @class
 */
class Users extends  AbstractModel {
    constructor(){
        super();

        /**
         * Collection of user information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserMessage> || null}
         */
        this.UserSet = null;

        /**
         * Total users
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserSet) {
            this.UserSet = new Array();
            for (let z in params.UserSet) {
                let obj = new UserMessage();
                obj.deserialize(params.UserSet[z]);
                this.UserSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * GrantDLCCatalogAccess request structure.
 * @class
 */
class GrantDLCCatalogAccessRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Authorized VpcId
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Product (EMR|DLC|Doris|Inlong|Wedata)
         * @type {string || null}
         */
        this.Product = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * UIN of the account to which VPC belongs
         * @type {string || null}
         */
        this.VpcUin = null;

        /**
         * AppId of the account to which VPC belongs
         * @type {number || null}
         */
        this.VpcAppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Product = 'Product' in params ? params.Product : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.VpcUin = 'VpcUin' in params ? params.VpcUin : null;
        this.VpcAppId = 'VpcAppId' in params ? params.VpcAppId : null;

    }
}

/**
 * Engine configurations
 * @class
 */
class DataEngineConfigPair extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration items
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ConfigItem = null;

        /**
         * Configuration values
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ConfigValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConfigItem = 'ConfigItem' in params ? params.ConfigItem : null;
        this.ConfigValue = 'ConfigValue' in params ? params.ConfigValue : null;

    }
}

/**
 * The session resource configuration template for a Spark cluster.
 * @class
 */
class SessionResourceTemplate extends  AbstractModel {
    constructor(){
        super();

        /**
         * The driver size.
Valid values for the standard resource type: `small`, `medium`, `large`, and `xlarge`.
Valid values for the memory resource type: `m.small`, `m.medium`, `m.large`, and `m.xlarge`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DriverSize = null;

        /**
         * The executor size.
Valid values for the standard resource type: `small`, `medium`, `large`, and `xlarge`.
Valid values for the memory resource type: `m.small`, `m.medium`, `m.large`, and `m.xlarge`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExecutorSize = null;

        /**
         * The executor count. The minimum value is 1 and the maximum value is less than the cluster specification.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExecutorNums = null;

        /**
         * The maximum executor count (in dynamic mode). The minimum value is 1 and the maximum value is less than the cluster specification. If you set `ExecutorMaxNumbers` to a value smaller than that of `ExecutorNums`, the value of `ExecutorMaxNumbers` is automatically changed to that of `ExecutorNums`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExecutorMaxNumbers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DriverSize = 'DriverSize' in params ? params.DriverSize : null;
        this.ExecutorSize = 'ExecutorSize' in params ? params.ExecutorSize : null;
        this.ExecutorNums = 'ExecutorNums' in params ? params.ExecutorNums : null;
        this.ExecutorMaxNumbers = 'ExecutorMaxNumbers' in params ? params.ExecutorMaxNumbers : null;

    }
}

/**
 * DropDMSTable request structure.
 * @class
 */
class DropDMSTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Table name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Whether to delete the data
         * @type {boolean || null}
         */
        this.DeleteData = null;

        /**
         * Environment properties
         * @type {KVPair || null}
         */
        this.EnvProps = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.DeleteData = 'DeleteData' in params ? params.DeleteData : null;

        if (params.EnvProps) {
            let obj = new KVPair();
            obj.deserialize(params.EnvProps)
            this.EnvProps = obj;
        }

    }
}

/**
 * UpdateDataMaskStrategy request structure.
 * @class
 */
class UpdateDataMaskStrategyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Masking policy description.
         * @type {DataMaskStrategyInfo || null}
         */
        this.Strategy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Strategy) {
            let obj = new DataMaskStrategyInfo();
            obj.deserialize(params.Strategy)
            this.Strategy = obj;
        }

    }
}

/**
 * Task statistics information.
 * @class
 */
class StatisticInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Amount of data scanned
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalProcessedBytes = null;

        /**
         * Calculation time: ms
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UsedTime = null;

        /**
         * Creation Time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Task end time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Task start time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Number of rows affected
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RowsAffect = null;

        /**
         * Task duration
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.TotalProcessedBytes = 'TotalProcessedBytes' in params ? params.TotalProcessedBytes : null;
        this.UsedTime = 'UsedTime' in params ? params.UsedTime : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.RowsAffect = 'RowsAffect' in params ? params.RowsAffect : null;
        this.TotalTime = 'TotalTime' in params ? params.TotalTime : null;

    }
}

/**
 * AttachWorkGroupPolicy response structure.
 * @class
 */
class AttachWorkGroupPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyAdvancedStoreLocation response structure.
 * @class
 */
class ModifyAdvancedStoreLocationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSubUserAccessPolicy response structure.
 * @class
 */
class DescribeSubUserAccessPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Sub-user's visiting policy
         * @type {string || null}
         */
        this.PolicyDocument = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PolicyDocument = 'PolicyDocument' in params ? params.PolicyDocument : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The task instance.
 * @class
 */
class TaskResponseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name of the task
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Data volume of the task
         * @type {number || null}
         */
        this.DataAmount = null;

        /**
         * Task ID
         * @type {string || null}
         */
        this.Id = null;

        /**
         * The compute time in ms.
         * @type {number || null}
         */
        this.UsedTime = null;

        /**
         * Task output path
         * @type {string || null}
         */
        this.OutputPath = null;

        /**
         * Task creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * The task status. Valid values: `0` (initializing), `1` (executing), `2` (executed), `3` (writing data), `4` (queuing), `-1` (failed), and `-3` (canceled).
         * @type {number || null}
         */
        this.State = null;

        /**
         * SQL statement type of the task, such as DDL and DML.
         * @type {string || null}
         */
        this.SQLType = null;

        /**
         * SQL statement of the task
         * @type {string || null}
         */
        this.SQL = null;

        /**
         * Whether the result has expired
         * @type {boolean || null}
         */
        this.ResultExpired = null;

        /**
         * Number of affected data rows
         * @type {string || null}
         */
        this.RowAffectInfo = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataSet = null;

        /**
         * Failure information, such as `errorMessage`. This field has been disused.
         * @type {string || null}
         */
        this.Error = null;

        /**
         * Task progress (%)
         * @type {number || null}
         */
        this.Percentage = null;

        /**
         * Output information of task execution
         * @type {string || null}
         */
        this.OutputMessage = null;

        /**
         * Type of the engine executing the SQL statement
         * @type {string || null}
         */
        this.TaskType = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProgressDetail = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdateTime = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OperateUin = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InputType = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InputConf = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DataNumber = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.CanDownload = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserAlias = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkJobName = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkJobId = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkJobFile = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UiUrl = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalTime = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CmdArgs = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ImageVersion = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DriverSize = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExecutorSize = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExecutorNums = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExecutorMaxNumbers = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {CommonMetrics || null}
         */
        this.CommonMetrics = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SparkMonitorMetrics || null}
         */
        this.SparkMonitorMetrics = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PrestoMonitorMetrics || null}
         */
        this.PrestoMonitorMetrics = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResultFormat = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EngineTypeDetail = null;

        /**
         * Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.DataAmount = 'DataAmount' in params ? params.DataAmount : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.UsedTime = 'UsedTime' in params ? params.UsedTime : null;
        this.OutputPath = 'OutputPath' in params ? params.OutputPath : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.State = 'State' in params ? params.State : null;
        this.SQLType = 'SQLType' in params ? params.SQLType : null;
        this.SQL = 'SQL' in params ? params.SQL : null;
        this.ResultExpired = 'ResultExpired' in params ? params.ResultExpired : null;
        this.RowAffectInfo = 'RowAffectInfo' in params ? params.RowAffectInfo : null;
        this.DataSet = 'DataSet' in params ? params.DataSet : null;
        this.Error = 'Error' in params ? params.Error : null;
        this.Percentage = 'Percentage' in params ? params.Percentage : null;
        this.OutputMessage = 'OutputMessage' in params ? params.OutputMessage : null;
        this.TaskType = 'TaskType' in params ? params.TaskType : null;
        this.ProgressDetail = 'ProgressDetail' in params ? params.ProgressDetail : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.OperateUin = 'OperateUin' in params ? params.OperateUin : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.InputType = 'InputType' in params ? params.InputType : null;
        this.InputConf = 'InputConf' in params ? params.InputConf : null;
        this.DataNumber = 'DataNumber' in params ? params.DataNumber : null;
        this.CanDownload = 'CanDownload' in params ? params.CanDownload : null;
        this.UserAlias = 'UserAlias' in params ? params.UserAlias : null;
        this.SparkJobName = 'SparkJobName' in params ? params.SparkJobName : null;
        this.SparkJobId = 'SparkJobId' in params ? params.SparkJobId : null;
        this.SparkJobFile = 'SparkJobFile' in params ? params.SparkJobFile : null;
        this.UiUrl = 'UiUrl' in params ? params.UiUrl : null;
        this.TotalTime = 'TotalTime' in params ? params.TotalTime : null;
        this.CmdArgs = 'CmdArgs' in params ? params.CmdArgs : null;
        this.ImageVersion = 'ImageVersion' in params ? params.ImageVersion : null;
        this.DriverSize = 'DriverSize' in params ? params.DriverSize : null;
        this.ExecutorSize = 'ExecutorSize' in params ? params.ExecutorSize : null;
        this.ExecutorNums = 'ExecutorNums' in params ? params.ExecutorNums : null;
        this.ExecutorMaxNumbers = 'ExecutorMaxNumbers' in params ? params.ExecutorMaxNumbers : null;

        if (params.CommonMetrics) {
            let obj = new CommonMetrics();
            obj.deserialize(params.CommonMetrics)
            this.CommonMetrics = obj;
        }

        if (params.SparkMonitorMetrics) {
            let obj = new SparkMonitorMetrics();
            obj.deserialize(params.SparkMonitorMetrics)
            this.SparkMonitorMetrics = obj;
        }

        if (params.PrestoMonitorMetrics) {
            let obj = new PrestoMonitorMetrics();
            obj.deserialize(params.PrestoMonitorMetrics)
            this.PrestoMonitorMetrics = obj;
        }
        this.ResultFormat = 'ResultFormat' in params ? params.ResultFormat : null;
        this.EngineTypeDetail = 'EngineTypeDetail' in params ? params.EngineTypeDetail : null;
        this.ResourceGroupName = 'ResourceGroupName' in params ? params.ResourceGroupName : null;

    }
}

/**
 * RevokeDLCCatalogAccess request structure.
 * @class
 */
class RevokeDLCCatalogAccessRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VpcID
         * @type {string || null}
         */
        this.VpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

    }
}

/**
 * UpgradeDataEngineImage response structure.
 * @class
 */
class UpgradeDataEngineImageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachDataMaskPolicy request structure.
 * @class
 */
class AttachDataMaskPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Collection of DMask permission objects that should be bound.
         * @type {Array.<DataMaskStrategyPolicy> || null}
         */
        this.DataMaskStrategyPolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DataMaskStrategyPolicySet) {
            this.DataMaskStrategyPolicySet = new Array();
            for (let z in params.DataMaskStrategyPolicySet) {
                let obj = new DataMaskStrategyPolicy();
                obj.deserialize(params.DataMaskStrategyPolicySet[z]);
                this.DataMaskStrategyPolicySet.push(obj);
            }
        }

    }
}

/**
 * Description of metadata storage attributes
 * @class
 */
class DMSSds extends  AbstractModel {
    constructor(){
        super();

        /**
         * Storage address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Location = null;

        /**
         * Input format
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InputFormat = null;

        /**
         * Output format
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OutputFormat = null;

        /**
         * Number of buckets
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NumBuckets = null;

        /**
         * Whether it is compressed
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Compressed = null;

        /**
         * Whether it has a subdirectory
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.StoredAsSubDirectories = null;

        /**
         * Serialization lib
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SerdeLib = null;

        /**
         * Serialization name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SerdeName = null;

        /**
         * Bucket name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.BucketCols = null;

        /**
         * Serialization parameters
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<KVPair> || null}
         */
        this.SerdeParams = null;

        /**
         * Additional Parameters
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<KVPair> || null}
         */
        this.Params = null;

        /**
         * Column sorting (Expired)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DMSColumnOrder || null}
         */
        this.SortCols = null;

        /**
         * Column
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DMSColumn> || null}
         */
        this.Cols = null;

        /**
         * Column sorting field
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DMSColumnOrder> || null}
         */
        this.SortColumns = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Location = 'Location' in params ? params.Location : null;
        this.InputFormat = 'InputFormat' in params ? params.InputFormat : null;
        this.OutputFormat = 'OutputFormat' in params ? params.OutputFormat : null;
        this.NumBuckets = 'NumBuckets' in params ? params.NumBuckets : null;
        this.Compressed = 'Compressed' in params ? params.Compressed : null;
        this.StoredAsSubDirectories = 'StoredAsSubDirectories' in params ? params.StoredAsSubDirectories : null;
        this.SerdeLib = 'SerdeLib' in params ? params.SerdeLib : null;
        this.SerdeName = 'SerdeName' in params ? params.SerdeName : null;
        this.BucketCols = 'BucketCols' in params ? params.BucketCols : null;

        if (params.SerdeParams) {
            this.SerdeParams = new Array();
            for (let z in params.SerdeParams) {
                let obj = new KVPair();
                obj.deserialize(params.SerdeParams[z]);
                this.SerdeParams.push(obj);
            }
        }

        if (params.Params) {
            this.Params = new Array();
            for (let z in params.Params) {
                let obj = new KVPair();
                obj.deserialize(params.Params[z]);
                this.Params.push(obj);
            }
        }

        if (params.SortCols) {
            let obj = new DMSColumnOrder();
            obj.deserialize(params.SortCols)
            this.SortCols = obj;
        }

        if (params.Cols) {
            this.Cols = new Array();
            for (let z in params.Cols) {
                let obj = new DMSColumn();
                obj.deserialize(params.Cols[z]);
                this.Cols.push(obj);
            }
        }

        if (params.SortColumns) {
            this.SortColumns = new Array();
            for (let z in params.SortColumns) {
                let obj = new DMSColumnOrder();
                obj.deserialize(params.SortColumns[z]);
                this.SortColumns.push(obj);
            }
        }

    }
}

/**
 * Information about the users accessing through the third-party
 * @class
 */
class OpendThirdAccessUserInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * User primary UIN
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * User AppID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppId = null;

        /**
         * Activation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * Working group information
 * @class
 */
class WorkGroupInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the working group that have been queried
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Working group name
         * @type {string || null}
         */
        this.WorkGroupName = null;

        /**
         * Working group description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WorkGroupDescription = null;

        /**
         * Number of users associated with working groups
         * @type {number || null}
         */
        this.UserNum = null;

        /**
         * Collection of users associated with working groups
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserMessage> || null}
         */
        this.UserSet = null;

        /**
         * Collections of permissions bound to working groups
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

        /**
         * Creators of working groups
         * @type {string || null}
         */
        this.Creator = null;

        /**
         * The creation time of the working group, e.g. at 16:19:32 on Jul 28, 2021
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.WorkGroupName = 'WorkGroupName' in params ? params.WorkGroupName : null;
        this.WorkGroupDescription = 'WorkGroupDescription' in params ? params.WorkGroupDescription : null;
        this.UserNum = 'UserNum' in params ? params.UserNum : null;

        if (params.UserSet) {
            this.UserSet = new Array();
            for (let z in params.UserSet) {
                let obj = new UserMessage();
                obj.deserialize(params.UserSet[z]);
                this.UserSet.push(obj);
            }
        }

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }
        this.Creator = 'Creator' in params ? params.Creator : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * CreateSparkAppTask response structure.
 * @class
 */
class CreateSparkAppTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Batch ID
         * @type {string || null}
         */
        this.BatchId = null;

        /**
         * Task ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BatchId = 'BatchId' in params ? params.BatchId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CancelTask request structure.
 * @class
 */
class CancelTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Globally unique task ID
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * Check permission information
 * @class
 */
class CheckPermission extends  AbstractModel {
    constructor(){
        super();

        /**
         * Permission type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessType = null;

        /**
         * Resource information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResourceBaseInfo || null}
         */
        this.ResourceBaseInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AccessType = 'AccessType' in params ? params.AccessType : null;

        if (params.ResourceBaseInfo) {
            let obj = new ResourceBaseInfo();
            obj.deserialize(params.ResourceBaseInfo)
            this.ResourceBaseInfo = obj;
        }

    }
}

/**
 * DropDMSDatabase request structure.
 * @class
 */
class DropDMSDatabaseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Whether to delete the data.
         * @type {boolean || null}
         */
        this.DeleteData = null;

        /**
         * Whether to use cascade delete.
         * @type {boolean || null}
         */
        this.Cascade = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.DeleteData = 'DeleteData' in params ? params.DeleteData : null;
        this.Cascade = 'Cascade' in params ? params.Cascade : null;

    }
}

/**
 * DescribeDataEngineImageVersions request structure.
 * @class
 */
class DescribeDataEngineImageVersionsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Types of engines: SQL, SparkBatch, StandardSpark, and StandardPresto
         * @type {string || null}
         */
        this.EngineType = null;

        /**
         * 
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.Asc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EngineType = 'EngineType' in params ? params.EngineType : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

    }
}

/**
 * BindWorkGroupsToUser response structure.
 * @class
 */
class BindWorkGroupsToUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDataMaskStrategy response structure.
 * @class
 */
class CreateDataMaskStrategyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Policy ID
         * @type {string || null}
         */
        this.StrategyId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StrategyId = 'StrategyId' in params ? params.StrategyId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeStoreLocation response structure.
 * @class
 */
class DescribeStoreLocationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Return the path of the location where results are stored and which was set by the user. If it is not set, the null character string, i.e. "", will be returned.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StoreLocation = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StoreLocation = 'StoreLocation' in params ? params.StoreLocation : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDataEngineDescription response structure.
 * @class
 */
class ModifyDataEngineDescriptionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeJob request structure.
 * @class
 */
class DescribeJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID
         * @type {string || null}
         */
        this.JobId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;

    }
}

/**
 * DropDLCTable response structure.
 * @class
 */
class DropDLCTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserRoles request structure.
 * @class
 */
class DescribeUserRolesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number limit of enumerated user roles.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * The offset for starting enumeration. 
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Fuzzy enumeration by arn.
         * @type {string || null}
         */
        this.Fuzzy = null;

        /**
         * The field for sorting the returned results.
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * The sorting order, descending or ascending, such as `desc`.
         * @type {string || null}
         */
        this.Sorting = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Fuzzy = 'Fuzzy' in params ? params.Fuzzy : null;
        this.SortBy = 'SortBy' in params ? params.SortBy : null;
        this.Sorting = 'Sorting' in params ? params.Sorting : null;

    }
}

/**
 * QueryTaskCostDetail response structure.
 * @class
 */
class QueryTaskCostDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Binding Self-purchased CHDFS to DLC
 * @class
 */
class OtherCHDFSBinding extends  AbstractModel {
    constructor(){
        super();

        /**
         * Product name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProductName = null;

        /**
         * User name (a discarded field)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SuperUser = null;

        /**
         * VPC configuration information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CHDFSProductVpcInfo> || null}
         */
        this.VpcInfo = null;

        /**
         * Whether to bind the bucket (a discarded field)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsBind = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProductName = 'ProductName' in params ? params.ProductName : null;
        this.SuperUser = 'SuperUser' in params ? params.SuperUser : null;

        if (params.VpcInfo) {
            this.VpcInfo = new Array();
            for (let z in params.VpcInfo) {
                let obj = new CHDFSProductVpcInfo();
                obj.deserialize(params.VpcInfo[z]);
                this.VpcInfo.push(obj);
            }
        }
        this.IsBind = 'IsBind' in params ? params.IsBind : null;

    }
}

/**
 * Collections of working groups
 * @class
 */
class WorkGroups extends  AbstractModel {
    constructor(){
        super();

        /**
         * Collection of working group information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<WorkGroupMessage> || null}
         */
        this.WorkGroupSet = null;

        /**
         * Total working groups
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.WorkGroupSet) {
            this.WorkGroupSet = new Array();
            for (let z in params.WorkGroupSet) {
                let obj = new WorkGroupMessage();
                obj.deserialize(params.WorkGroupSet[z]);
                this.WorkGroupSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * ResourceInfo
 * @class
 */
class ResourceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Affiliated type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AttributionType = null;

        /**
         * Resource type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Engine name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * If the resource type is spark-sql, the value is Name; if the resource type is spark-batch, the value is session app_name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Instance = null;

        /**
         * Affinity
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<FavorInfo> || null}
         */
        this.Favor = null;

        /**
         * Status
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AttributionType = 'AttributionType' in params ? params.AttributionType : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Instance = 'Instance' in params ? params.Instance : null;

        if (params.Favor) {
            this.Favor = new Array();
            for (let z in params.Favor) {
                let obj = new FavorInfo();
                obj.deserialize(params.Favor[z]);
                this.Favor.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * CreateDLCTable request structure.
 * @class
 */
class CreateDLCTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data table configuration information
         * @type {TableBaseInfo || null}
         */
        this.TableBaseInfo = null;

        /**
         * Table type
         * @type {string || null}
         */
        this.TableType = null;

        /**
         * Data table column information
         * @type {Array.<TColumn> || null}
         */
        this.Columns = null;

        /**
         * Data table partition information
         * @type {Array.<TPartition> || null}
         */
        this.Partitions = null;

        /**
         * Data table attribute information
         * @type {Array.<Property> || null}
         */
        this.Properties = null;

        /**
         * External table configuration information
         * @type {ExternalDataConfiguration || null}
         */
        this.ExternalDataConfiguration = null;

        /**
         * Engine name
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Resource group name
         * @type {string || null}
         */
        this.ResourceGroupname = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TableBaseInfo) {
            let obj = new TableBaseInfo();
            obj.deserialize(params.TableBaseInfo)
            this.TableBaseInfo = obj;
        }
        this.TableType = 'TableType' in params ? params.TableType : null;

        if (params.Columns) {
            this.Columns = new Array();
            for (let z in params.Columns) {
                let obj = new TColumn();
                obj.deserialize(params.Columns[z]);
                this.Columns.push(obj);
            }
        }

        if (params.Partitions) {
            this.Partitions = new Array();
            for (let z in params.Partitions) {
                let obj = new TPartition();
                obj.deserialize(params.Partitions[z]);
                this.Partitions.push(obj);
            }
        }

        if (params.Properties) {
            this.Properties = new Array();
            for (let z in params.Properties) {
                let obj = new Property();
                obj.deserialize(params.Properties[z]);
                this.Properties.push(obj);
            }
        }

        if (params.ExternalDataConfiguration) {
            let obj = new ExternalDataConfiguration();
            obj.deserialize(params.ExternalDataConfiguration)
            this.ExternalDataConfiguration = obj;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.ResourceGroupname = 'ResourceGroupname' in params ? params.ResourceGroupname : null;

    }
}

/**
 * Source database description
 * @class
 */
class DMSSourceDatabaseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Source database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SourceDatabaseName = null;

        /**
         * Array of table names in the source database
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SourceTableNameList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SourceDatabaseName = 'SourceDatabaseName' in params ? params.SourceDatabaseName : null;
        this.SourceTableNameList = 'SourceTableNameList' in params ? params.SourceTableNameList : null;

    }
}

/**
 * DescribeSubUserAccessPolicy request structure.
 * @class
 */
class DescribeSubUserAccessPolicyRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * UpgradeDataEngineImage request structure.
 * @class
 */
class UpgradeDataEngineImageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;

    }
}

/**
 * SmartPolicyRequest
 * @class
 */
class SmartPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Basic information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SmartPolicyBaseInfo || null}
         */
        this.BaseInfo = null;

        /**
         * Policy description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SmartOptimizerPolicy || null}
         */
        this.Policy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.BaseInfo) {
            let obj = new SmartPolicyBaseInfo();
            obj.deserialize(params.BaseInfo)
            this.BaseInfo = obj;
        }

        if (params.Policy) {
            let obj = new SmartOptimizerPolicy();
            obj.deserialize(params.Policy)
            this.Policy = obj;
        }

    }
}

/**
 * SmartOptimizerIndexPolicy
 * @class
 */
class SmartOptimizerIndexPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Enable index.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IndexEnable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IndexEnable = 'IndexEnable' in params ? params.IndexEnable : null;

    }
}

/**
 * BindWorkGroupsToUser request structure.
 * @class
 */
class BindWorkGroupsToUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information about bound working groups and users
         * @type {WorkGroupIdSetOfUserId || null}
         */
        this.AddInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddInfo) {
            let obj = new WorkGroupIdSetOfUserId();
            obj.deserialize(params.AddInfo)
            this.AddInfo = obj;
        }

    }
}

/**
 * Column information of the data table.
 * @class
 */
class Column extends  AbstractModel {
    constructor(){
        super();

        /**
         * Column name, which is case-insensitive and can contain up to 25 characters.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Column type. Valid values:
string|tinyint|smallint|int|bigint|boolean|float|double|decimal|timestamp|date|binary|array<data_type>|map<primitive_type, data_type>|struct<col_name : data_type [COMMENT col_comment], ...>|uniontype<data_type, data_type, ...>.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Class comment.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Comment = null;

        /**
         * Length of the entire numeric value
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Precision = null;

        /**
         * Length of the decimal part
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Scale = null;

        /**
         * Whether the column is null.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Nullable = null;

        /**
         * Field position
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Position = null;

        /**
         * Field creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Field modification time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModifiedTime = null;

        /**
         * Whether the column is the partition field.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsPartition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Comment = 'Comment' in params ? params.Comment : null;
        this.Precision = 'Precision' in params ? params.Precision : null;
        this.Scale = 'Scale' in params ? params.Scale : null;
        this.Nullable = 'Nullable' in params ? params.Nullable : null;
        this.Position = 'Position' in params ? params.Position : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifiedTime = 'ModifiedTime' in params ? params.ModifiedTime : null;
        this.IsPartition = 'IsPartition' in params ? params.IsPartition : null;

    }
}

/**
 * VPC subnet information
 * @class
 */
class VpcCidrBlock extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subnet ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CidrId = null;

        /**
         * Subnet IP range
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CidrAddr = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CidrId = 'CidrId' in params ? params.CidrId : null;
        this.CidrAddr = 'CidrAddr' in params ? params.CidrAddr : null;

    }
}

/**
 * RenewDataEngine request structure.
 * @class
 */
class RenewDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * CU queue name
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Renewal period in months, which is at least one month.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Payment type. It is 1 by default and is prepaid.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Unit. It is m by default, and only m can be filled in.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Auto-renewal flag: 0 means the initial status, and there is no automatic renewal by default. If the user has the privilege to retain services with prepayment, there will be an automatic renewal. 1 means that there is an automatic renewal. 2 means that there is surely no automatic renewal. If it is not specified, the parameter is 0 by default.
         * @type {number || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * DescribeTaskResult request structure.
 * @class
 */
class DescribeTaskResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique task ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The pagination information returned by the last response. This parameter can be omitted for the first response, where the data will be returned from the beginning. The data with a volume set by the `MaxResults` field is returned each time.
         * @type {string || null}
         */
        this.NextToken = null;

        /**
         * Maximum number of returned rows. Value range: 0–1,000. Default value: 1,000.
         * @type {number || null}
         */
        this.MaxResults = null;

        /**
         * Whether to convert the data type
         * @type {boolean || null}
         */
        this.IsTransformDataType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.NextToken = 'NextToken' in params ? params.NextToken : null;
        this.MaxResults = 'MaxResults' in params ? params.MaxResults : null;
        this.IsTransformDataType = 'IsTransformDataType' in params ? params.IsTransformDataType : null;

    }
}

/**
 * UpdateUserDataEngineConfig request structure.
 * @class
 */
class UpdateUserDataEngineConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Collection of user-defined engine configuration items. This parameter needs to input all the configuration items users should add. For example, if there is a configuration item named k1:v1 while k2:v2 needs to be added, [k1:v1,k2:v2] should be passed.
         * @type {Array.<DataEngineConfigPair> || null}
         */
        this.DataEngineConfigPairs = null;

        /**
         * Template of the resource configuration of the job engine
         * @type {SessionResourceTemplate || null}
         */
        this.SessionResourceTemplate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;

        if (params.DataEngineConfigPairs) {
            this.DataEngineConfigPairs = new Array();
            for (let z in params.DataEngineConfigPairs) {
                let obj = new DataEngineConfigPair();
                obj.deserialize(params.DataEngineConfigPairs[z]);
                this.DataEngineConfigPairs.push(obj);
            }
        }

        if (params.SessionResourceTemplate) {
            let obj = new SessionResourceTemplate();
            obj.deserialize(params.SessionResourceTemplate)
            this.SessionResourceTemplate = obj;
        }

    }
}

/**
 * Query list filter parameter
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Attribute name. If more than one filter exists, the logical relationship between these filters is `OR`.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Attribute value. If multiple values exist in one filter, the logical relationship between these values is `OR`.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * DescribeLakeFsDirSummary response structure.
 * @class
 */
class DescribeLakeFsDirSummaryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Table configurations
 * @class
 */
class TableBaseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The database name.
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * The table name.
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * The data source name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionName = null;

        /**
         * The table remarks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableComment = null;

        /**
         * The specific type: `table` or `view`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * The data format type, such as `hive` and `iceberg`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TableFormat = null;

        /**
         * The table creator name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserAlias = null;

        /**
         * The table creator ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserSubUin = null;

        /**
         * The data governance configuration.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DataGovernPolicy || null}
         */
        this.GovernPolicy = null;

        /**
         * Whether database data governance is disabled. Valid values: `true` (disabled) and `false` (not disabled).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DbGovernPolicyIsDisable = null;

        /**
         * Smart data governance configuration items
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SmartPolicy || null}
         */
        this.SmartPolicy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.DatasourceConnectionName = 'DatasourceConnectionName' in params ? params.DatasourceConnectionName : null;
        this.TableComment = 'TableComment' in params ? params.TableComment : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.TableFormat = 'TableFormat' in params ? params.TableFormat : null;
        this.UserAlias = 'UserAlias' in params ? params.UserAlias : null;
        this.UserSubUin = 'UserSubUin' in params ? params.UserSubUin : null;

        if (params.GovernPolicy) {
            let obj = new DataGovernPolicy();
            obj.deserialize(params.GovernPolicy)
            this.GovernPolicy = obj;
        }
        this.DbGovernPolicyIsDisable = 'DbGovernPolicyIsDisable' in params ? params.DbGovernPolicyIsDisable : null;

        if (params.SmartPolicy) {
            let obj = new SmartPolicy();
            obj.deserialize(params.SmartPolicy)
            this.SmartPolicy = obj;
        }

    }
}

/**
 * DescribeForbiddenTablePro response structure.
 * @class
 */
class DescribeForbiddenTableProResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeWorkGroupInfo request structure.
 * @class
 */
class DescribeWorkGroupInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group IDs
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Types of queried information. User: user information; DataAuth: data permissions; EngineAuth: engine permissions
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Filter criteria that are queried

When the type is User, the fuzzy search is supported as the key is user-name.

When the type is DataAuth, the keys supported are:

policy-type: types of permissions;

policy-source: data sources;

data-name: fuzzy search of the database and table.

When the type is EngineAuth, the keys supported are:

policy-type: types of permissions;

policy-source: data sources;

engine-name: fuzzy search of the database and table.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Sort fields.

When the type is User, create-time and user-name are supported.

When the type is DataAuth, create-time is supported.

When the type is EngineAuth, create-time is supported.
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * Sorting methods: desc means in order; asc means in reverse order; it is asc by default.
         * @type {string || null}
         */
        this.Sorting = null;

        /**
         * Quantity of returns. It is 20 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, which is 0 by default.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.SortBy = 'SortBy' in params ? params.SortBy : null;
        this.Sorting = 'Sorting' in params ? params.Sorting : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * CreateUser request structure.
 * @class
 */
class CreateUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Sub-user UIN that needs to be granted permissions. It can be checked through the upper right corner of Tencent Cloud Console → Account Information → Account ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * User description, which can make it easy to identify different users.
         * @type {string || null}
         */
        this.UserDescription = null;

        /**
         * Collections of permissions bound to users
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

        /**
         * Types of users. ADMIN: administrators; COMMON: general users. When the type of user is administrator, the collections of permissions and bound working groups cannot be set. Administrators own all the permissions by default. If the parameter is not filled in, it will be COMMON by default.
         * @type {string || null}
         */
        this.UserType = null;

        /**
         * Collection of IDs of working groups bound to users
         * @type {Array.<number> || null}
         */
        this.WorkGroupIds = null;

        /**
         * User alias, and its characters are less than 50.
         * @type {string || null}
         */
        this.UserAlias = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserDescription = 'UserDescription' in params ? params.UserDescription : null;

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }
        this.UserType = 'UserType' in params ? params.UserType : null;
        this.WorkGroupIds = 'WorkGroupIds' in params ? params.WorkGroupIds : null;
        this.UserAlias = 'UserAlias' in params ? params.UserAlias : null;

    }
}

/**
 * DropDMSDatabase response structure.
 * @class
 */
class DropDMSDatabaseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyWorkGroup request structure.
 * @class
 */
class ModifyWorkGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group IDs
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Working group description, and the upper limit of the number of its characters is 50.
         * @type {string || null}
         */
        this.WorkGroupDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.WorkGroupDescription = 'WorkGroupDescription' in params ? params.WorkGroupDescription : null;

    }
}

/**
 * DescribeDLCTable request structure.
 * @class
 */
class DescribeDLCTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Data table name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Catalog name
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Keyword
         * @type {string || null}
         */
        this.Keyword = null;

        /**
         * Match rules
         * @type {string || null}
         */
        this.Pattern = null;

        /**
         * Table type
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;
        this.Pattern = 'Pattern' in params ? params.Pattern : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * CancelTask response structure.
 * @class
 */
class CancelTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The data governance rules.
 * @class
 */
class DataGovernPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Governance rule type. Valid values: `Customize` (custom) and `Intelligence` (intelligent).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RuleType = null;

        /**
         * The governance engine.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GovernEngine = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RuleType = 'RuleType' in params ? params.RuleType : null;
        this.GovernEngine = 'GovernEngine' in params ? params.GovernEngine : null;

    }
}

/**
 * DeleteWorkGroup response structure.
 * @class
 */
class DeleteWorkGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDLCCatalogAccess request structure.
 * @class
 */
class DescribeDLCCatalogAccessRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Displayed records
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Number of records
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filter criteria
         * @type {Filter || null}
         */
        this.Filter = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filter) {
            let obj = new Filter();
            obj.deserialize(params.Filter)
            this.Filter = obj;
        }

    }
}

/**
 * Collections of the working groups bound to the same user
 * @class
 */
class WorkGroupIdSetOfUserId extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID, which matches Uin on the CAM side.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Collections of IDs of working groups
         * @type {Array.<number> || null}
         */
        this.WorkGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.WorkGroupIds = 'WorkGroupIds' in params ? params.WorkGroupIds : null;

    }
}

/**
 * CheckGrantedPermission request structure.
 * @class
 */
class CheckGrantedPermissionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Permission check
         * @type {Array.<CheckPermission> || null}
         */
        this.CheckPermission = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CheckPermission) {
            this.CheckPermission = new Array();
            for (let z in params.CheckPermission) {
                let obj = new CheckPermission();
                obj.deserialize(params.CheckPermission[z]);
                this.CheckPermission.push(obj);
            }
        }

    }
}

/**
 * DescribeDLCTable response structure.
 * @class
 */
class DescribeDLCTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data table information object
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DLCTable || null}
         */
        this.DLCTable = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DLCTable) {
            let obj = new DLCTable();
            obj.deserialize(params.DLCTable)
            this.DLCTable = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateWorkGroup response structure.
 * @class
 */
class CreateWorkGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group ID which is globally unique
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RegisterThirdPartyAccessUser request structure.
 * @class
 */
class RegisterThirdPartyAccessUserRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeEngineUsageInfo response structure.
 * @class
 */
class DescribeEngineUsageInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The total cluster spec.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The used cluster spec.
         * @type {number || null}
         */
        this.Used = null;

        /**
         * The available cluster spec.
         * @type {number || null}
         */
        this.Available = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.Used = 'Used' in params ? params.Used : null;
        this.Available = 'Available' in params ? params.Available : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeWorkGroupInfo response structure.
 * @class
 */
class DescribeWorkGroupInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Details about working groups
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {WorkGroupDetailInfo || null}
         */
        this.WorkGroupInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.WorkGroupInfo) {
            let obj = new WorkGroupDetailInfo();
            obj.deserialize(params.WorkGroupInfo)
            this.WorkGroupInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CheckDataEngineImageCanBeRollback response structure.
 * @class
 */
class CheckDataEngineImageCanBeRollbackResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Log record ID after rolling back
         * @type {string || null}
         */
        this.ToRecordId = null;

        /**
         * Log record ID before rolling back
         * @type {string || null}
         */
        this.FromRecordId = null;

        /**
         * Whether it can be rolled back
         * @type {boolean || null}
         */
        this.IsRollback = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ToRecordId = 'ToRecordId' in params ? params.ToRecordId : null;
        this.FromRecordId = 'FromRecordId' in params ? params.FromRecordId : null;
        this.IsRollback = 'IsRollback' in params ? params.IsRollback : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SmartPolicyBaseInfo
 * @class
 */
class SmartPolicyBaseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User UIN
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Catalog/Database/Table
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PolicyType = null;

        /**
         * Catalog name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Table name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Table = null;

        /**
         * User AppID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.PolicyType = 'PolicyType' in params ? params.PolicyType : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.Database = 'Database' in params ? params.Database : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.AppId = 'AppId' in params ? params.AppId : null;

    }
}

/**
 * CreateStoreLocation request structure.
 * @class
 */
class CreateStoreLocationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * COS path for calculation results storage, such as cosn://bucketname/
         * @type {string || null}
         */
        this.StoreLocation = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StoreLocation = 'StoreLocation' in params ? params.StoreLocation : null;

    }
}

/**
 * DescribeThirdPartyAccessUser response structure.
 * @class
 */
class DescribeThirdPartyAccessUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * User information
         * @type {OpendThirdAccessUserInfo || null}
         */
        this.UserInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserInfo) {
            let obj = new OpendThirdAccessUserInfo();
            obj.deserialize(params.UserInfo)
            this.UserInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateResultDownload request structure.
 * @class
 */
class CreateResultDownloadRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The result query task ID.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The result format.
         * @type {string || null}
         */
        this.Format = null;

        /**
         * Whether to re-generate a file to download. This parameter applies only when the last task is `timeout` or `error`.
         * @type {boolean || null}
         */
        this.Force = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Format = 'Format' in params ? params.Format : null;
        this.Force = 'Force' in params ? params.Force : null;

    }
}

/**
 * DescribeLakeFsInfo response structure.
 * @class
 */
class DescribeLakeFsInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Managed storage information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<LakeFsInfo> || null}
         */
        this.LakeFsInfos = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LakeFsInfos) {
            this.LakeFsInfos = new Array();
            for (let z in params.LakeFsInfos) {
                let obj = new LakeFsInfo();
                obj.deserialize(params.LakeFsInfos[z]);
                this.LakeFsInfos.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeJobs request structure.
 * @class
 */
class DescribeJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query keywords
         * @type {string || null}
         */
        this.Keyword = null;

        /**
         * Matching mode
         * @type {string || null}
         */
        this.Pattern = null;

        /**
         * Pagination parameters
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination parameters
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Sorting fields
         * @type {string || null}
         */
        this.Sort = null;

        /**
         * Sorting fields, and true means the ascending order (by default) while false means the descending order.
         * @type {boolean || null}
         */
        this.Asc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Keyword = 'Keyword' in params ? params.Keyword : null;
        this.Pattern = 'Pattern' in params ? params.Pattern : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Sort = 'Sort' in params ? params.Sort : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

    }
}

/**
 * CancelSparkSessionBatchSQL response structure.
 * @class
 */
class CancelSparkSessionBatchSQLResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSparkAppJob response structure.
 * @class
 */
class DescribeSparkAppJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Spark job details
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {SparkJobInfo || null}
         */
        this.Job = null;

        /**
         * Whether the queried Spark job exists
         * @type {boolean || null}
         */
        this.IsExists = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Job) {
            let obj = new SparkJobInfo();
            obj.deserialize(params.Job)
            this.Job = obj;
        }
        this.IsExists = 'IsExists' in params ? params.IsExists : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Partition objects of the migrating metadata
 * @class
 */
class DMSPartition extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Data directory name
         * @type {string || null}
         */
        this.SchemaName = null;

        /**
         * Table name
         * @type {string || null}
         */
        this.TableName = null;

        /**
         * Data version
         * @type {number || null}
         */
        this.DataVersion = null;

        /**
         * Partition name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Value List
         * @type {Array.<string> || null}
         */
        this.Values = null;

        /**
         * Storage size
         * @type {number || null}
         */
        this.StorageSize = null;

        /**
         * Number of records
         * @type {number || null}
         */
        this.RecordCount = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.ModifiedTime = null;

        /**
         * Last access time
         * @type {string || null}
         */
        this.LastAccessTime = null;

        /**
         * Additional attribute
         * @type {Array.<KVPair> || null}
         */
        this.Params = null;

        /**
         * Storage object
         * @type {DMSSds || null}
         */
        this.Sds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.SchemaName = 'SchemaName' in params ? params.SchemaName : null;
        this.TableName = 'TableName' in params ? params.TableName : null;
        this.DataVersion = 'DataVersion' in params ? params.DataVersion : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;
        this.StorageSize = 'StorageSize' in params ? params.StorageSize : null;
        this.RecordCount = 'RecordCount' in params ? params.RecordCount : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifiedTime = 'ModifiedTime' in params ? params.ModifiedTime : null;
        this.LastAccessTime = 'LastAccessTime' in params ? params.LastAccessTime : null;

        if (params.Params) {
            this.Params = new Array();
            for (let z in params.Params) {
                let obj = new KVPair();
                obj.deserialize(params.Params[z]);
                this.Params.push(obj);
            }
        }

        if (params.Sds) {
            let obj = new DMSSds();
            obj.deserialize(params.Sds)
            this.Sds = obj;
        }

    }
}

/**
 * Details about working groups
 * @class
 */
class WorkGroupDetailInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Working group name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WorkGroupName = null;

        /**
         * Types of information included. User: user information; DataAuth: data permissions; EngineAuth: engine permissions
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Collection of users bound to working groups
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Users || null}
         */
        this.UserInfo = null;

        /**
         * Collection of data permissions
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Policys || null}
         */
        this.DataPolicyInfo = null;

        /**
         * Collection of engine permissions
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Policys || null}
         */
        this.EnginePolicyInfo = null;

        /**
         * Working group description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WorkGroupDescription = null;

        /**
         * Collection of information about filtered rows
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Policys || null}
         */
        this.RowFilterInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;
        this.WorkGroupName = 'WorkGroupName' in params ? params.WorkGroupName : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.UserInfo) {
            let obj = new Users();
            obj.deserialize(params.UserInfo)
            this.UserInfo = obj;
        }

        if (params.DataPolicyInfo) {
            let obj = new Policys();
            obj.deserialize(params.DataPolicyInfo)
            this.DataPolicyInfo = obj;
        }

        if (params.EnginePolicyInfo) {
            let obj = new Policys();
            obj.deserialize(params.EnginePolicyInfo)
            this.EnginePolicyInfo = obj;
        }
        this.WorkGroupDescription = 'WorkGroupDescription' in params ? params.WorkGroupDescription : null;

        if (params.RowFilterInfo) {
            let obj = new Policys();
            obj.deserialize(params.RowFilterInfo)
            this.RowFilterInfo = obj;
        }

    }
}

/**
 * DescribeThirdPartyAccessUser request structure.
 * @class
 */
class DescribeThirdPartyAccessUserRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * GetOptimizerPolicy response structure.
 * @class
 */
class GetOptimizerPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Smart optimization policy
         * @type {SmartOptimizerPolicy || null}
         */
        this.SmartOptimizerPolicy = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SmartOptimizerPolicy) {
            let obj = new SmartOptimizerPolicy();
            obj.deserialize(params.SmartOptimizerPolicy)
            this.SmartOptimizerPolicy = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteDataEngine request structure.
 * @class
 */
class DeleteDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Delete the name array of virtual clusters.
         * @type {Array.<string> || null}
         */
        this.DataEngineNames = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineNames = 'DataEngineNames' in params ? params.DataEngineNames : null;

    }
}

/**
 * Collection of tasks executed sequentially in batches
 * @class
 */
class TasksInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task type. Valid values: `SQLTask` (SQL query task), `SparkSQLTask` (Spark SQL query task).
         * @type {string || null}
         */
        this.TaskType = null;

        /**
         * Fault tolerance policy. `Proceed`: continues to execute subsequent tasks after the current task fails or is canceled. `Terminate`: terminates the execution of subsequent tasks after the current task fails or is canceled, and marks all subsequent tasks as canceled.
         * @type {string || null}
         */
        this.FailureTolerance = null;

        /**
         * Base64-encrypted SQL statements separated by ";". Up to 50 tasks can be submitted at a time, and they will be executed strictly in sequence.
         * @type {string || null}
         */
        this.SQL = null;

        /**
         * Configuration information of the task. Currently, only `SparkSQLTask` tasks are supported.
         * @type {Array.<KVPair> || null}
         */
        this.Config = null;

        /**
         * User-defined parameters of the task
         * @type {Array.<KVPair> || null}
         */
        this.Params = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskType = 'TaskType' in params ? params.TaskType : null;
        this.FailureTolerance = 'FailureTolerance' in params ? params.FailureTolerance : null;
        this.SQL = 'SQL' in params ? params.SQL : null;

        if (params.Config) {
            this.Config = new Array();
            for (let z in params.Config) {
                let obj = new KVPair();
                obj.deserialize(params.Config[z]);
                this.Config.push(obj);
            }
        }

        if (params.Params) {
            this.Params = new Array();
            for (let z in params.Params) {
                let obj = new KVPair();
                obj.deserialize(params.Params[z]);
                this.Params.push(obj);
            }
        }

    }
}

/**
 * Information about the major version of the cluster image
 * @class
 */
class DataEngineImageVersion extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the major version of the image
         * @type {string || null}
         */
        this.ImageVersionId = null;

        /**
         * Name of the major version of the image
         * @type {string || null}
         */
        this.ImageVersion = null;

        /**
         * Description of the major version of the image
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Whether it is a public version: 1: public version; 2: private version
         * @type {number || null}
         */
        this.IsPublic = null;

        /**
         * Cluster types: SparkSQL, PrestoSQL, and SparkBatch
         * @type {string || null}
         */
        this.EngineType = null;

        /**
         * Version status. 1: initializing; 2: online; 3: offline
         * @type {number || null}
         */
        this.IsSharedEngine = null;

        /**
         * Version status. 1: initializing; 2: online; 3: offline
         * @type {number || null}
         */
        this.State = null;

        /**
         * Insert time
         * @type {string || null}
         */
        this.InsertTime = null;

        /**
         * Update time
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ImageVersionId = 'ImageVersionId' in params ? params.ImageVersionId : null;
        this.ImageVersion = 'ImageVersion' in params ? params.ImageVersion : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.IsPublic = 'IsPublic' in params ? params.IsPublic : null;
        this.EngineType = 'EngineType' in params ? params.EngineType : null;
        this.IsSharedEngine = 'IsSharedEngine' in params ? params.IsSharedEngine : null;
        this.State = 'State' in params ? params.State : null;
        this.InsertTime = 'InsertTime' in params ? params.InsertTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * CreateSparkSessionBatchSQL response structure.
 * @class
 */
class CreateSparkSessionBatchSQLResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique identifier of a batch task.
         * @type {string || null}
         */
        this.BatchId = null;

        /**
         * Statement task list information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<StatementInformation> || null}
         */
        this.Statements = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BatchId = 'BatchId' in params ? params.BatchId : null;

        if (params.Statements) {
            this.Statements = new Array();
            for (let z in params.Statements) {
                let obj = new StatementInformation();
                obj.deserialize(params.Statements[z]);
                this.Statements.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDMSDatabase request structure.
 * @class
 */
class DescribeDMSDatabaseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Schema name
         * @type {string || null}
         */
        this.SchemaName = null;

        /**
         * Match rules
         * @type {string || null}
         */
        this.Pattern = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.SchemaName = 'SchemaName' in params ? params.SchemaName : null;
        this.Pattern = 'Pattern' in params ? params.Pattern : null;

    }
}

/**
 * DescribeLakeFsDirSummary request structure.
 * @class
 */
class DescribeLakeFsDirSummaryRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * Permission objects
 * @class
 */
class Policy extends  AbstractModel {
    constructor(){
        super();

        /**
         * The database name requiring authorization. use * to represent all databases under the current Catalog. for administrator level authorization type, only * is allowed. for data connection level authorization type, leave it blank. for other types, any specified database is allowed.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Specifies the name of the data source requiring authorization. at administrator level, only * is supported (representing all resources at this level). for database-level or data source-level authentication, only COSDataCatalog or * is supported. for table-level authentication, user-defined data sources can be filled. defaults to DataLakeCatalog if left blank. note: if authenticating a user-defined data source, the permissions DLC can manage are a subset of the account provided when the user accesses the data source.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Specifies the table name requiring authorization. use * to represent all tables in the current Database. for administrator-level authorization type, only * is allowed. for data connection level or Database-level authorization type, leave it blank. for other types, any specific data table can be specified.
         * @type {string || null}
         */
        this.Table = null;

        /**
         * The target permissions, which vary by permission level. Admin: `ALL` (default); data connection: `CREATE`; database: `ALL`, `CREATE`, `ALTER`, and `DROP`; table: `ALL`, `SELECT`, `INSERT`, `ALTER`, `DELETE`, `DROP`, and `UPDATE`. Note: For table permissions, if a data source other than `COSDataCatalog` is specified, only the `SELECT` permission can be granted here.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * The permission type. Valid values: `ADMIN`, `DATASOURCE`, `DATABASE`, `TABLE`, `VIEW`, `FUNCTION`, `COLUMN`, and `ENGINE`. Note: If it is left empty, `ADMIN` is used.
         * @type {string || null}
         */
        this.PolicyType = null;

        /**
         * Name of the function requiring authorization. use * to represent all functions in the current Catalog. for administrator-level authorization type, only * is allowed. for data connection-level authorization type, leave it blank. for other types, any function can be specified.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Function = null;

        /**
         * Authorization is required for the view. fill in * to represent all views under the current Database. when the authorization type is administrator level, only * is allowed. when the authorization type is data connection level or Database level, only blank is allowed. for other types, any view can be specified.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.View = null;

        /**
         * Columns requiring authorization. use * to represent all current columns. when the authorization type is administrator level, only * is allowed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Column = null;

        /**
         * The data engine requiring authorization. use * to represent all current engines. when the authorization type is administrator level, only * is allowed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngine = null;

        /**
         * Whether the grantee is allowed to further grant the permissions. Valid values: `false` (default) and `true` (the grantee can grant permissions gained here to other sub-users).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ReAuth = null;

        /**
         * The permission source, which is not required when input parameters are passed in. Valid values: `USER` (from the user) and `WORKGROUP` (from one or more associated work groups).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * The grant mode, which is not required as an input parameter. Valid values: `COMMON` and `SENIOR`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Mode = null;

        /**
         * The operator, which is not required as an input parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Operator = null;

        /**
         * The permission policy creation time, which is not required as an input parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * The ID of the work group, which applies only when the value of the `Source` field is `WORKGROUP`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SourceId = null;

        /**
         * The name of the work group, which applies only when the value of the `Source` field is `WORKGROUP`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SourceName = null;

        /**
         * The policy ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Specifies the engine type.

         * @type {string || null}
         */
        this.EngineGeneration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Database = 'Database' in params ? params.Database : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.PolicyType = 'PolicyType' in params ? params.PolicyType : null;
        this.Function = 'Function' in params ? params.Function : null;
        this.View = 'View' in params ? params.View : null;
        this.Column = 'Column' in params ? params.Column : null;
        this.DataEngine = 'DataEngine' in params ? params.DataEngine : null;
        this.ReAuth = 'ReAuth' in params ? params.ReAuth : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.Operator = 'Operator' in params ? params.Operator : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.SourceId = 'SourceId' in params ? params.SourceId : null;
        this.SourceName = 'SourceName' in params ? params.SourceName : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.EngineGeneration = 'EngineGeneration' in params ? params.EngineGeneration : null;

    }
}

/**
 * DescribeDMSDatabaseList response structure.
 * @class
 */
class DescribeDMSDatabaseListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of database objects for the DMS
         * @type {Array.<DMSDatabaseInfo> || null}
         */
        this.DatabaseList = null;

        /**
         * Total number of databases
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DatabaseList) {
            this.DatabaseList = new Array();
            for (let z in params.DatabaseList) {
                let obj = new DMSDatabaseInfo();
                obj.deserialize(params.DatabaseList[z]);
                this.DatabaseList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyGovernEventRule request structure.
 * @class
 */
class ModifyGovernEventRuleRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DeleteUsersFromWorkGroup request structure.
 * @class
 */
class DeleteUsersFromWorkGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User information to be deleted
         * @type {UserIdSetOfWorkGroupId || null}
         */
        this.AddInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddInfo) {
            let obj = new UserIdSetOfWorkGroupId();
            obj.deserialize(params.AddInfo)
            this.AddInfo = obj;
        }

    }
}

/**
 * Column sorting object
 * @class
 */
class DMSColumnOrder extends  AbstractModel {
    constructor(){
        super();

        /**
         * Column name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Col = null;

        /**
         * Sort
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Order = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Col = 'Col' in params ? params.Col : null;
        this.Order = 'Order' in params ? params.Order : null;

    }
}

/**
 * CreateSparkApp response structure.
 * @class
 */
class CreateSparkAppResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the application.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkAppId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SparkAppId = 'SparkAppId' in params ? params.SparkAppId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateTask response structure.
 * @class
 */
class CreateTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDataEnginesScaleDetail request structure.
 * @class
 */
class DescribeDataEnginesScaleDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine name list
         * @type {Array.<string> || null}
         */
        this.DataEngineNames = null;

        /**
         * Start time, and the format is yyyy-MM-dd HH:mm:ss. It can query the records within one month at most.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time, and the format is yyyy-MM-dd HH:mm:ss. It can query the records within one month at most.
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineNames = 'DataEngineNames' in params ? params.DataEngineNames : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * DeleteSparkApp response structure.
 * @class
 */
class DeleteSparkAppResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Tag pair info
 * @class
 */
class TagInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The tag key.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * The tag value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TagValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;

    }
}

/**
 * Network configuration
 * @class
 */
class NetworkConnection extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network configuration ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Unique identifier of network configuration
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AssociateId = null;

        /**
         * Computing engine ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.HouseId = null;

        /**
         * Data source ID (discarded)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionId = null;

        /**
         * Network configuration status (0 - initializing; 1 - normal)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.State = null;

        /**
         * Creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UpdateTime = null;

        /**
         * Create user Appid.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Appid = null;

        /**
         * Computing engine name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.HouseName = null;

        /**
         * Network configuration name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionName = null;

        /**
         * Network configuration type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NetworkConnectionType = null;

        /**
         * Create user UIN.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Create user SubAccountUin.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubAccountUin = null;

        /**
         * Network configuration description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NetworkConnectionDesc = null;

        /**
         * Data source vpcid
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionVpcId = null;

        /**
         * Data source SubnetId
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionSubnetId = null;

        /**
         * Data source SubnetId
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionCidrBlock = null;

        /**
         * Data source SubnetCidrBlock
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionSubnetCidrBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.AssociateId = 'AssociateId' in params ? params.AssociateId : null;
        this.HouseId = 'HouseId' in params ? params.HouseId : null;
        this.DatasourceConnectionId = 'DatasourceConnectionId' in params ? params.DatasourceConnectionId : null;
        this.State = 'State' in params ? params.State : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.Appid = 'Appid' in params ? params.Appid : null;
        this.HouseName = 'HouseName' in params ? params.HouseName : null;
        this.DatasourceConnectionName = 'DatasourceConnectionName' in params ? params.DatasourceConnectionName : null;
        this.NetworkConnectionType = 'NetworkConnectionType' in params ? params.NetworkConnectionType : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;
        this.NetworkConnectionDesc = 'NetworkConnectionDesc' in params ? params.NetworkConnectionDesc : null;
        this.DatasourceConnectionVpcId = 'DatasourceConnectionVpcId' in params ? params.DatasourceConnectionVpcId : null;
        this.DatasourceConnectionSubnetId = 'DatasourceConnectionSubnetId' in params ? params.DatasourceConnectionSubnetId : null;
        this.DatasourceConnectionCidrBlock = 'DatasourceConnectionCidrBlock' in params ? params.DatasourceConnectionCidrBlock : null;
        this.DatasourceConnectionSubnetCidrBlock = 'DatasourceConnectionSubnetCidrBlock' in params ? params.DatasourceConnectionSubnetCidrBlock : null;

    }
}

/**
 * CreateTasks request structure.
 * @class
 */
class CreateTasksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name. If there is a database name in the SQL statement, the database in the SQL statement will be used first; otherwise, the database specified by this parameter will be used (note: when submitting the database creation SQL statement, passed in an empty string for this field).
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * SQL task information
         * @type {TasksInfo || null}
         */
        this.Tasks = null;

        /**
         * Data source name. Default value: DataLakeCatalog.
         * @type {string || null}
         */
        this.DatasourceConnectionName = null;

        /**
         * Compute engine name. If this parameter is not specified, the task will be submitted to the default engine.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Resource group name of the spark cluster
         * @type {string || null}
         */
        this.ResourceGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;

        if (params.Tasks) {
            let obj = new TasksInfo();
            obj.deserialize(params.Tasks)
            this.Tasks = obj;
        }
        this.DatasourceConnectionName = 'DatasourceConnectionName' in params ? params.DatasourceConnectionName : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.ResourceGroupName = 'ResourceGroupName' in params ? params.ResourceGroupName : null;

    }
}

/**
 * SuspendResumeDataEngine request structure.
 * @class
 */
class SuspendResumeDataEngineRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The name of a virtual cluster.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * The operation type: `suspend` or `resume`.
         * @type {string || null}
         */
        this.Operate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.Operate = 'Operate' in params ? params.Operate : null;

    }
}

/**
 * The task result information.
 * @class
 */
class TaskResultInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique task ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Name of the default selected data source when the current job is executed
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatasourceConnectionName = null;

        /**
         * Name of the default selected database when the current job is executed
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * The currently executed SQL statement. Each task contains one SQL statement.
         * @type {string || null}
         */
        this.SQL = null;

        /**
         * Type of the executed task. Valid values: `DDL`, `DML`, `DQL`.
         * @type {string || null}
         */
        this.SQLType = null;

        /**
         * u200cThe current task status. Valid values: `0` (initializing), `1` (executing), `2` (executed), `3` (writing data), `4` (queuing), u200c`-1` (failed), and `-3` (canceled). Only when the task is successfully executed, a task execution result will be returned.
         * @type {number || null}
         */
        this.State = null;

        /**
         * Amount of the data scanned in bytes
         * @type {number || null}
         */
        this.DataAmount = null;

        /**
         * The compute time in ms.
         * @type {number || null}
         */
        this.UsedTime = null;

        /**
         * Address of the COS bucket for storing the task result
         * @type {string || null}
         */
        this.OutputPath = null;

        /**
         * Task creation timestamp
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Task execution information. `success` will be returned if the task succeeds; otherwise, the failure cause will be returned.
         * @type {string || null}
         */
        this.OutputMessage = null;

        /**
         * Number of affected rows
         * @type {string || null}
         */
        this.RowAffectInfo = null;

        /**
         * Schema information of the result
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Column> || null}
         */
        this.ResultSchema = null;

        /**
         * Result information. After it is unescaped, each element of the outer array is a data row.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResultSet = null;

        /**
         * Pagination information. If there is no more result data, `nextToken` will be empty.
         * @type {string || null}
         */
        this.NextToken = null;

        /**
         * Task progress (%)
         * @type {number || null}
         */
        this.Percentage = null;

        /**
         * Task progress details
         * @type {string || null}
         */
        this.ProgressDetail = null;

        /**
         * Console display format. Valid values: `table`, `text`.
         * @type {string || null}
         */
        this.DisplayFormat = null;

        /**
         * The task time in ms.
         * @type {number || null}
         */
        this.TotalTime = null;

        /**
         * Time consumed to get results
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.QueryResultTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.DatasourceConnectionName = 'DatasourceConnectionName' in params ? params.DatasourceConnectionName : null;
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.SQL = 'SQL' in params ? params.SQL : null;
        this.SQLType = 'SQLType' in params ? params.SQLType : null;
        this.State = 'State' in params ? params.State : null;
        this.DataAmount = 'DataAmount' in params ? params.DataAmount : null;
        this.UsedTime = 'UsedTime' in params ? params.UsedTime : null;
        this.OutputPath = 'OutputPath' in params ? params.OutputPath : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.OutputMessage = 'OutputMessage' in params ? params.OutputMessage : null;
        this.RowAffectInfo = 'RowAffectInfo' in params ? params.RowAffectInfo : null;

        if (params.ResultSchema) {
            this.ResultSchema = new Array();
            for (let z in params.ResultSchema) {
                let obj = new Column();
                obj.deserialize(params.ResultSchema[z]);
                this.ResultSchema.push(obj);
            }
        }
        this.ResultSet = 'ResultSet' in params ? params.ResultSet : null;
        this.NextToken = 'NextToken' in params ? params.NextToken : null;
        this.Percentage = 'Percentage' in params ? params.Percentage : null;
        this.ProgressDetail = 'ProgressDetail' in params ? params.ProgressDetail : null;
        this.DisplayFormat = 'DisplayFormat' in params ? params.DisplayFormat : null;
        this.TotalTime = 'TotalTime' in params ? params.TotalTime : null;
        this.QueryResultTime = 'QueryResultTime' in params ? params.QueryResultTime : null;

    }
}

/**
 * DescribeSparkAppJobs response structure.
 * @class
 */
class DescribeSparkAppJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Detailed list of Spark jobs
         * @type {Array.<SparkJobInfo> || null}
         */
        this.SparkAppJobs = null;

        /**
         * Total number of Spark jobs
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SparkAppJobs) {
            this.SparkAppJobs = new Array();
            for (let z in params.SparkAppJobs) {
                let obj = new SparkJobInfo();
                obj.deserialize(params.SparkAppJobs[z]);
                this.SparkAppJobs.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteThirdPartyAccessUser response structure.
 * @class
 */
class DeleteThirdPartyAccessUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSparkAppTasks response structure.
 * @class
 */
class DescribeSparkAppTasksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task result (this field has been disused)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {TaskResponseInfo || null}
         */
        this.Tasks = null;

        /**
         * Total number of tasks
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of task results
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TaskResponseInfo> || null}
         */
        this.SparkAppTasks = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Tasks) {
            let obj = new TaskResponseInfo();
            obj.deserialize(params.Tasks)
            this.Tasks = obj;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.SparkAppTasks) {
            this.SparkAppTasks = new Array();
            for (let z in params.SparkAppTasks) {
                let obj = new TaskResponseInfo();
                obj.deserialize(params.SparkAppTasks[z]);
                this.SparkAppTasks.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateUserDataEngineConfig response structure.
 * @class
 */
class UpdateUserDataEngineConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserType response structure.
 * @class
 */
class ModifyUserTypeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDataEngineImageVersions response structure.
 * @class
 */
class DescribeDataEngineImageVersionsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Major version of the image information list of clusters
         * @type {Array.<DataEngineImageVersion> || null}
         */
        this.ImageParentVersions = null;

        /**
         * Total
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ImageParentVersions) {
            this.ImageParentVersions = new Array();
            for (let z in params.ImageParentVersions) {
                let obj = new DataEngineImageVersion();
                obj.deserialize(params.ImageParentVersions[z]);
                this.ImageParentVersions.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CancelSparkSessionBatchSQL request structure.
 * @class
 */
class CancelSparkSessionBatchSQLRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique identifier of a batch task.
         * @type {string || null}
         */
        this.BatchId = null;

        /**
         * User-defined primary key. If it is specified, the value should be used for querying.
         * @type {string || null}
         */
        this.CustomKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BatchId = 'BatchId' in params ? params.BatchId : null;
        this.CustomKey = 'CustomKey' in params ? params.CustomKey : null;

    }
}

/**
 * DescribeWorkGroups request structure.
 * @class
 */
class DescribeWorkGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * IDs of working groups that are queried. If it is not filled in or is 0, this means no need for filtering.
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Filter criteria. Only the fuzzy search according to working group names is supported. The key is workgroup-name.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset, which is 0 by default.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Quantity of returns. It is 20 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sorting fields, which support the following type: create-time
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * Sorting methods; desc means in order; asc means in reverse order; it is asc by default.
         * @type {string || null}
         */
        this.Sorting = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SortBy = 'SortBy' in params ? params.SortBy : null;
        this.Sorting = 'Sorting' in params ? params.Sorting : null;

    }
}

/**
 * DescribeUserDataEngineConfig request structure.
 * @class
 */
class DescribeUserDataEngineConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Sorting methods; desc means in reverse order; asc means in order.
         * @type {string || null}
         */
        this.Sorting = null;

        /**
         * Quantity of returns. It is 10 by default, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, which is 0 by default.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Sorting fields, which support the following type: create-time
         * @type {string || null}
         */
        this.SortBy = null;

        /**
         * Filter criteria. The following filter types are supported. The parameter Name should be one of them. The number of values that can be filtered by each type of parameter should not be bigger than 5.
app-id - String - (filtering appid)
engine-id - String - (filtering engine ID)
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Sorting = 'Sorting' in params ? params.Sorting : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.SortBy = 'SortBy' in params ? params.SortBy : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * CopyDLCTable response structure.
 * @class
 */
class CopyDLCTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UnbindWorkGroupsFromUser request structure.
 * @class
 */
class UnbindWorkGroupsFromUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Association between the IDs of unbound working groups and user IDs
         * @type {WorkGroupIdSetOfUserId || null}
         */
        this.AddInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddInfo) {
            let obj = new WorkGroupIdSetOfUserId();
            obj.deserialize(params.AddInfo)
            this.AddInfo = obj;
        }

    }
}

/**
 * RenewDataEngine response structure.
 * @class
 */
class RenewDataEngineResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateRowFilter response structure.
 * @class
 */
class UpdateRowFilterResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information about the authorized user
 * @class
 */
class UserInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID, which is the same as the sub-user UIN
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * User description, which can make it easy to identify different users.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserDescription = null;

        /**
         * Collection of permissions solely bound to users
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

        /**
         * Creator of the current user
         * @type {string || null}
         */
        this.Creator = null;

        /**
         * Creation time, and the example of the format is at 16:19:32 on Jul 28, 2021.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Collection of associated working groups
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<WorkGroupMessage> || null}
         */
        this.WorkGroupSet = null;

        /**
         * Whether it is the root account
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsOwner = null;

        /**
         * Types of users. ADMIN: administrators; COMMON: general users
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserType = null;

        /**
         * User alias
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserAlias = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserDescription = 'UserDescription' in params ? params.UserDescription : null;

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }
        this.Creator = 'Creator' in params ? params.Creator : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

        if (params.WorkGroupSet) {
            this.WorkGroupSet = new Array();
            for (let z in params.WorkGroupSet) {
                let obj = new WorkGroupMessage();
                obj.deserialize(params.WorkGroupSet[z]);
                this.WorkGroupSet.push(obj);
            }
        }
        this.IsOwner = 'IsOwner' in params ? params.IsOwner : null;
        this.UserType = 'UserType' in params ? params.UserType : null;
        this.UserAlias = 'UserAlias' in params ? params.UserAlias : null;

    }
}

/**
 * CreateTasks response structure.
 * @class
 */
class CreateTasksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the current batch of submitted tasks
         * @type {string || null}
         */
        this.BatchId = null;

        /**
         * Collection of task IDs arranged in order of execution
         * @type {Array.<string> || null}
         */
        this.TaskIdSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BatchId = 'BatchId' in params ? params.BatchId : null;
        this.TaskIdSet = 'TaskIdSet' in params ? params.TaskIdSet : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Masking policy permission object.
 * @class
 */
class DataMaskStrategyPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Masking permission object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Policy || null}
         */
        this.PolicyInfo = null;

        /**
         * Masking policy ID. specifies the ID of the data masking policy.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataMaskStrategyId = null;

        /**
         * Bound field type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ColumnType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.PolicyInfo) {
            let obj = new Policy();
            obj.deserialize(params.PolicyInfo)
            this.PolicyInfo = obj;
        }
        this.DataMaskStrategyId = 'DataMaskStrategyId' in params ? params.DataMaskStrategyId : null;
        this.ColumnType = 'ColumnType' in params ? params.ColumnType : null;

    }
}

/**
 * GrantDLCCatalogAccess response structure.
 * @class
 */
class GrantDLCCatalogAccessResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateSparkApp request structure.
 * @class
 */
class CreateSparkAppRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Spark job name.
         * @type {string || null}
         */
        this.AppName = null;

        /**
         * The Spark job type. Valid values: `1` for Spark JAR job and `2` for Spark streaming job.
         * @type {number || null}
         */
        this.AppType = null;

        /**
         * The data engine executing the Spark job.
         * @type {string || null}
         */
        this.DataEngine = null;

        /**
         * The path of the Spark job package.
         * @type {string || null}
         */
        this.AppFile = null;

        /**
         * Data visiting policy achieved through CAM Role arn; the console can obtain it through Data Job -> Job Configuration; SDK can obtain corresponding values through the DescribeUserRoles API.
         * @type {number || null}
         */
        this.RoleArn = null;

        /**
         * The driver size. Valid values: `small` (default, 1 CU), `medium` (2 CUs), `large` (4 CUs), and `xlarge` (8 CUs).
         * @type {string || null}
         */
        this.AppDriverSize = null;

        /**
         * The executor size. Valid values: `small` (default, 1 CU), `medium` (2 CUs), `large` (4 CUs), and `xlarge` (8 CUs).
         * @type {string || null}
         */
        this.AppExecutorSize = null;

        /**
         * Number of Spark job executors
         * @type {number || null}
         */
        this.AppExecutorNums = null;

        /**
         * This field has been disused. Use the `Datasource` field instead.
         * @type {string || null}
         */
        this.Eni = null;

        /**
         * The source of the Spark job package. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocal = null;

        /**
         * The main class of the Spark job.
         * @type {string || null}
         */
        this.MainClass = null;

        /**
         * Spark configurations separated by line break
         * @type {string || null}
         */
        this.AppConf = null;

        /**
         * The source of the dependency JAR packages of the Spark job. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalJars = null;

        /**
         * The dependency JAR packages of the Spark JAR job (JAR packages), separated by comma.
         * @type {string || null}
         */
        this.AppJars = null;

        /**
         * The source of the dependency files of the Spark job. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalFiles = null;

        /**
         * The dependency files of the Spark job (files other than JAR and ZIP packages) separated by comma.
         * @type {string || null}
         */
        this.AppFiles = null;

        /**
         * The input parameters of the Spark job, separated by comma.
         * @type {string || null}
         */
        this.CmdArgs = null;

        /**
         * The maximum number of retries, valid for Spark streaming tasks only.
         * @type {number || null}
         */
        this.MaxRetries = null;

        /**
         * The data source name.
         * @type {string || null}
         */
        this.DataSource = null;

        /**
         * The source of the PySpark dependencies. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalPythonFiles = null;

        /**
         * The PySpark dependencies (Python files), separated by comma, with .py, .zip, and .egg formats supported.
         * @type {string || null}
         */
        this.AppPythonFiles = null;

        /**
         * The source of the dependency archives of the Spark job. Valid values: `cos` for COS and `lakefs` for the local system (for use in the console, but this method does not support direct API calls).
         * @type {string || null}
         */
        this.IsLocalArchives = null;

        /**
         * The dependency archives of the Spark job, separated by comma, with tar.gz, .tgz, and .tar formats supported.
         * @type {string || null}
         */
        this.AppArchives = null;

        /**
         * The Spark image version.
         * @type {string || null}
         */
        this.SparkImage = null;

        /**
         * The Spark image version name.
         * @type {string || null}
         */
        this.SparkImageVersion = null;

        /**
         * The specified executor count (max), which defaults to 1. This parameter applies if the "Dynamic" mode is selected. If the "Dynamic" mode is not selected, the executor count is equal to `AppExecutorNums`.
         * @type {number || null}
         */
        this.AppExecutorMaxNumbers = null;

        /**
         * The ID of the associated Data Lake Compute query script.
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * Whether to inherit the task resource configuration from the cluster template. Valid values: `0` (default): No; `1`: Yes.
         * @type {number || null}
         */
        this.IsInherit = null;

        /**
         * Whether to run the task with the session SQLs. Valid values: `false` for no and `true` for yes.
         * @type {boolean || null}
         */
        this.IsSessionStarted = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AppName = 'AppName' in params ? params.AppName : null;
        this.AppType = 'AppType' in params ? params.AppType : null;
        this.DataEngine = 'DataEngine' in params ? params.DataEngine : null;
        this.AppFile = 'AppFile' in params ? params.AppFile : null;
        this.RoleArn = 'RoleArn' in params ? params.RoleArn : null;
        this.AppDriverSize = 'AppDriverSize' in params ? params.AppDriverSize : null;
        this.AppExecutorSize = 'AppExecutorSize' in params ? params.AppExecutorSize : null;
        this.AppExecutorNums = 'AppExecutorNums' in params ? params.AppExecutorNums : null;
        this.Eni = 'Eni' in params ? params.Eni : null;
        this.IsLocal = 'IsLocal' in params ? params.IsLocal : null;
        this.MainClass = 'MainClass' in params ? params.MainClass : null;
        this.AppConf = 'AppConf' in params ? params.AppConf : null;
        this.IsLocalJars = 'IsLocalJars' in params ? params.IsLocalJars : null;
        this.AppJars = 'AppJars' in params ? params.AppJars : null;
        this.IsLocalFiles = 'IsLocalFiles' in params ? params.IsLocalFiles : null;
        this.AppFiles = 'AppFiles' in params ? params.AppFiles : null;
        this.CmdArgs = 'CmdArgs' in params ? params.CmdArgs : null;
        this.MaxRetries = 'MaxRetries' in params ? params.MaxRetries : null;
        this.DataSource = 'DataSource' in params ? params.DataSource : null;
        this.IsLocalPythonFiles = 'IsLocalPythonFiles' in params ? params.IsLocalPythonFiles : null;
        this.AppPythonFiles = 'AppPythonFiles' in params ? params.AppPythonFiles : null;
        this.IsLocalArchives = 'IsLocalArchives' in params ? params.IsLocalArchives : null;
        this.AppArchives = 'AppArchives' in params ? params.AppArchives : null;
        this.SparkImage = 'SparkImage' in params ? params.SparkImage : null;
        this.SparkImageVersion = 'SparkImageVersion' in params ? params.SparkImageVersion : null;
        this.AppExecutorMaxNumbers = 'AppExecutorMaxNumbers' in params ? params.AppExecutorMaxNumbers : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.IsInherit = 'IsInherit' in params ? params.IsInherit : null;
        this.IsSessionStarted = 'IsSessionStarted' in params ? params.IsSessionStarted : null;

    }
}

/**
 * Engine specification details
 * @class
 */
class DataEngineScaleInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Engine name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Engine specification details
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DataEngineScaleInfoDetail> || null}
         */
        this.ScaleDetail = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;

        if (params.ScaleDetail) {
            this.ScaleDetail = new Array();
            for (let z in params.ScaleDetail) {
                let obj = new DataEngineScaleInfoDetail();
                obj.deserialize(params.ScaleDetail[z]);
                this.ScaleDetail.push(obj);
            }
        }

    }
}

/**
 * CreateSparkSessionBatchSQL request structure.
 * @class
 */
class CreateSparkSessionBatchSQLRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The name of the engine for executing the Spark job.
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Run SQL. The base64 encoding is needed.
         * @type {string || null}
         */
        this.ExecuteSQL = null;

        /**
         * The driver size. Valid values: `small` (default, 1 CU), `medium` (2 CUs), `large` (4 CUs), and `xlarge` (8 CUs).
         * @type {string || null}
         */
        this.DriverSize = null;

        /**
         * The executor size. Valid values: `small` (default, 1 CU), `medium` (2 CUs), `large` (4 CUs), and `xlarge` (8 CUs).
         * @type {string || null}
         */
        this.ExecutorSize = null;

        /**
         * The executor count, which defaults to 1.
         * @type {number || null}
         */
        this.ExecutorNumbers = null;

        /**
         * The maximum executor count, which defaults to 1. This parameter applies if the "Dynamic" mode is selected. If the "Dynamic" mode is not selected, the value of this parameter is the same as that of `ExecutorNumbers`.
         * @type {number || null}
         */
        this.ExecutorMaxNumbers = null;

        /**
         * The session timeout period in seconds. Default value: 3600
         * @type {number || null}
         */
        this.TimeoutInSecond = null;

        /**
         * The unique ID of a session. If this parameter is specified, the task will be run using the specified session.
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * The name of the session to create.
         * @type {string || null}
         */
        this.SessionName = null;

        /**
         * The session configurations. Valid values: `1.dlc.eni` for user-defined ENI gateway information;
`2.dlc.role.arn` for user-defined roleArn configurations;
and `3.dlc.sql.set.config` for user-defined cluster configurations.
         * @type {Array.<KVPair> || null}
         */
        this.Arguments = null;

        /**
         * Whether to inherit the resource configuration of clusters; 0: not inherit (by default); 1: inherit clusters.
         * @type {number || null}
         */
        this.IsInherit = null;

        /**
         * User-defined primary key, and it should be unique.
         * @type {string || null}
         */
        this.CustomKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.ExecuteSQL = 'ExecuteSQL' in params ? params.ExecuteSQL : null;
        this.DriverSize = 'DriverSize' in params ? params.DriverSize : null;
        this.ExecutorSize = 'ExecutorSize' in params ? params.ExecutorSize : null;
        this.ExecutorNumbers = 'ExecutorNumbers' in params ? params.ExecutorNumbers : null;
        this.ExecutorMaxNumbers = 'ExecutorMaxNumbers' in params ? params.ExecutorMaxNumbers : null;
        this.TimeoutInSecond = 'TimeoutInSecond' in params ? params.TimeoutInSecond : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.SessionName = 'SessionName' in params ? params.SessionName : null;

        if (params.Arguments) {
            this.Arguments = new Array();
            for (let z in params.Arguments) {
                let obj = new KVPair();
                obj.deserialize(params.Arguments[z]);
                this.Arguments.push(obj);
            }
        }
        this.IsInherit = 'IsInherit' in params ? params.IsInherit : null;
        this.CustomKey = 'CustomKey' in params ? params.CustomKey : null;

    }
}

/**
 * CopyDLCTable request structure.
 * @class
 */
class CopyDLCTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Description of the source data table name
         * @type {Array.<DMSSourceDatabaseInfo> || null}
         */
        this.SourceData = null;

        /**
         * Target database name
         * @type {string || null}
         */
        this.DestinationDatabaseName = null;

        /**
         * Target data table name
         * @type {string || null}
         */
        this.DestinationTableName = null;

        /**
         * Engine name
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Whether to create a new table
         * @type {boolean || null}
         */
        this.IsCreateTable = null;

        /**
         * Catalog name
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Resource group name
         * @type {string || null}
         */
        this.ResourceGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SourceData) {
            this.SourceData = new Array();
            for (let z in params.SourceData) {
                let obj = new DMSSourceDatabaseInfo();
                obj.deserialize(params.SourceData[z]);
                this.SourceData.push(obj);
            }
        }
        this.DestinationDatabaseName = 'DestinationDatabaseName' in params ? params.DestinationDatabaseName : null;
        this.DestinationTableName = 'DestinationTableName' in params ? params.DestinationTableName : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.IsCreateTable = 'IsCreateTable' in params ? params.IsCreateTable : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.ResourceGroupName = 'ResourceGroupName' in params ? params.ResourceGroupName : null;

    }
}

/**
 * UnbindWorkGroupsFromUser response structure.
 * @class
 */
class UnbindWorkGroupsFromUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * QueryTaskCostDetail request structure.
 * @class
 */
class QueryTaskCostDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter criteria. The following filter types are supported. The parameter Name should be one of them. The maximum number of values that can be filtered by task-id is 50. The values that can be filtered by other parameter filters should not be more than 5.
task-id - String - (accurate filtering of task IDs). The example of the value of task-id is e386471f-139a-4e59-877f-50ece8135b99.
task-state - String - (filtering task status); valid values: 0 (initializing), 1 (running), 2 (successful), and -1 (failed).
task-sql-keyword - String - (fuzzy filtering of the keywords of SQL statements); the example of the value is DROP TABLE.
task-operator- string (filtering sub-UIN)
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Start time, and the format is yyyy-mm-dd HH:MM:SS. It is the current moment 45 days ago by default.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time, and the format is yyyy-mm-dd HH:MM:SS. The time span is longer than 0 day but shorter than or equal to 30 days. Data within the recent 45 days can be queried. It is the current moment by default.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Data engine name, used for selecting
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Identifier on the next page
         * @type {string || null}
         */
        this.SearchAfter = null;

        /**
         * Size of each page
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.SearchAfter = 'SearchAfter' in params ? params.SearchAfter : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * Statistics of the Spark flow task
 * @class
 */
class StreamingStatistics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task start time
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Number of data receivers
         * @type {number || null}
         */
        this.Receivers = null;

        /**
         * Number of receivers in service
         * @type {number || null}
         */
        this.NumActiveReceivers = null;

        /**
         * Number of inactive receivers
         * @type {number || null}
         */
        this.NumInactiveReceivers = null;

        /**
         * Number of running batches
         * @type {number || null}
         */
        this.NumActiveBatches = null;

        /**
         * Number of batches to be processed
         * @type {number || null}
         */
        this.NumRetainedCompletedBatches = null;

        /**
         * Number of completed batches
         * @type {number || null}
         */
        this.NumTotalCompletedBatches = null;

        /**
         * Average input speed
         * @type {number || null}
         */
        this.AverageInputRate = null;

        /**
         * Average queue time
         * @type {number || null}
         */
        this.AverageSchedulingDelay = null;

        /**
         * Average processing time
         * @type {number || null}
         */
        this.AverageProcessingTime = null;

        /**
         * Average latency
         * @type {number || null}
         */
        this.AverageTotalDelay = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.Receivers = 'Receivers' in params ? params.Receivers : null;
        this.NumActiveReceivers = 'NumActiveReceivers' in params ? params.NumActiveReceivers : null;
        this.NumInactiveReceivers = 'NumInactiveReceivers' in params ? params.NumInactiveReceivers : null;
        this.NumActiveBatches = 'NumActiveBatches' in params ? params.NumActiveBatches : null;
        this.NumRetainedCompletedBatches = 'NumRetainedCompletedBatches' in params ? params.NumRetainedCompletedBatches : null;
        this.NumTotalCompletedBatches = 'NumTotalCompletedBatches' in params ? params.NumTotalCompletedBatches : null;
        this.AverageInputRate = 'AverageInputRate' in params ? params.AverageInputRate : null;
        this.AverageSchedulingDelay = 'AverageSchedulingDelay' in params ? params.AverageSchedulingDelay : null;
        this.AverageProcessingTime = 'AverageProcessingTime' in params ? params.AverageProcessingTime : null;
        this.AverageTotalDelay = 'AverageTotalDelay' in params ? params.AverageTotalDelay : null;

    }
}

/**
 * Metadata database objects
 * @class
 */
class DMSDatabaseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Schema name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SchemaName = null;

        /**
         * Storage address
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Location = null;

        /**
         * Basic object information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Asset || null}
         */
        this.Asset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.SchemaName = 'SchemaName' in params ? params.SchemaName : null;
        this.Location = 'Location' in params ? params.Location : null;

        if (params.Asset) {
            let obj = new Asset();
            obj.deserialize(params.Asset)
            this.Asset = obj;
        }

    }
}

/**
 * AlterDMSDatabase response structure.
 * @class
 */
class AlterDMSDatabaseResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateDataEngineConfig request structure.
 * @class
 */
class UpdateDataEngineConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
         * @type {Array.<string> || null}
         */
        this.DataEngineIds = null;

        /**
         * Commands of engine configuration. UpdateSparkSQLLakefsPath (updates the configuration of the native table) and UpdateSparkSQLResultPath (updates the configuration of the result path) are supported.
         * @type {string || null}
         */
        this.DataEngineConfigCommand = null;

        /**
         * Whether to use lakeFS as result storage
         * @type {boolean || null}
         */
        this.UseLakeFs = null;

        /**
         * User-defined result path
         * @type {string || null}
         */
        this.CustomResultPath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineIds = 'DataEngineIds' in params ? params.DataEngineIds : null;
        this.DataEngineConfigCommand = 'DataEngineConfigCommand' in params ? params.DataEngineConfigCommand : null;
        this.UseLakeFs = 'UseLakeFs' in params ? params.UseLakeFs : null;
        this.CustomResultPath = 'CustomResultPath' in params ? params.CustomResultPath : null;

    }
}

/**
 * CreateWorkGroup request structure.
 * @class
 */
class CreateWorkGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group name
         * @type {string || null}
         */
        this.WorkGroupName = null;

        /**
         * Working group description
         * @type {string || null}
         */
        this.WorkGroupDescription = null;

        /**
         * Collections of authentication policies bound to working groups
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

        /**
         * Collection of IDs of users to be bound to working groups
         * @type {Array.<string> || null}
         */
        this.UserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupName = 'WorkGroupName' in params ? params.WorkGroupName : null;
        this.WorkGroupDescription = 'WorkGroupDescription' in params ? params.WorkGroupDescription : null;

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }
        this.UserIds = 'UserIds' in params ? params.UserIds : null;

    }
}

/**
 * CreateInternalTable response structure.
 * @class
 */
class CreateInternalTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The SQL statements for creating the managed internal table.
         * @type {string || null}
         */
        this.Execution = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Execution = 'Execution' in params ? params.Execution : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DataEngine details
 * @class
 */
class DataEngineInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * DataEngine name
         * @type {string || null}
         */
        this.DataEngineName = null;

        /**
         * Engine type: spark/presto
         * @type {string || null}
         */
        this.EngineType = null;

        /**
         * Cluster resource type spark_private/presto_private/presto_cu/spark_cu
         * @type {string || null}
         */
        this.ClusterType = null;

        /**
         * Quota ID
         * @type {string || null}
         */
        this.QuotaId = null;

        /**
         * Data engine status -2 deleted, -1 failed, 0 initializing, 1 suspended, 2 running, 3 ready to delete, and 4 deleting
         * @type {number || null}
         */
        this.State = null;

        /**
         * Creation time
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Update time
         * @type {number || null}
         */
        this.UpdateTime = null;

        /**
         * Cluster specifications
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * Billing mode: 0 shared mode, 1 pay-as-you-go, and 2 monthly subscription
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Minimum number of clusters
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.MinClusters = null;

        /**
         * Maximum number of clusters
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.MaxClusters = null;

        /**
         * Whether to recover automatically
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {boolean || null}
         */
        this.AutoResume = null;

        /**
         * Automatic recovery time
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.SpendAfter = null;

        /**
         * Cluster IP range
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * Whether it is the default engine
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {boolean || null}
         */
        this.DefaultDataEngine = null;

        /**
         * Returned Message
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Operator
         * @type {string || null}
         */
        this.SubAccountUin = null;

        /**
         * Expiration time
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Isolation time
         * @type {string || null}
         */
        this.IsolatedTime = null;

        /**
         * Rectification time
         * @type {string || null}
         */
        this.ReversalTime = null;

        /**
         * Username
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.UserAlias = null;

        /**
         * Key-value pair collection
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<TagInfo> || null}
         */
        this.TagList = null;

        /**
         * Permissions owned by the engine
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<string> || null}
         */
        this.Permissions = null;

        /**
         * Whether to automatically suspend the cluster: False (by default) means that the cluster is not automatically suspended; true means that the cluster is automatically suspended.
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {boolean || null}
         */
        this.AutoSuspend = null;

        /**
         * Scheduling policy of starting and ending the cluster: 0 (by default) indicates turning off the scheduling policy; 1 indicates turning on the scheduling policy. (Note: The scheduling policy of starting and ending the cluster and the automatic suspension policy are mutually exclusive.)
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.CrontabResumeSuspend = null;

        /**
         * Scheduled start and end policy. Complex type: Include start and end time and the cluster suspension strategy.
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {CrontabResumeSuspendStrategy || null}
         */
        this.CrontabResumeSuspendStrategy = null;

        /**
         * Type of the task executed by the engine. Valid value: SQL/BATCH
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.EngineExecType = null;

        /**
         * Automatic renewal flag: 0 means the initial state and there is no automatic renewal by default. If the user has the privilege to retain services with advanced payment, there will be an automatic renewal. 1 means that there is an automatic renewal. 2 means that there is surely no automatic renewal.
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Cluster automatic suspension time
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.AutoSuspendTime = null;

        /**
         * Network connection configuration
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<NetworkConnection> || null}
         */
        this.NetworkConnectionSet = null;

        /**
         * Jump address of ui
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.UiURL = null;

        /**
         * Type of the engine resource
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Cluster image version ID
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.ImageVersionId = null;

        /**
         * Minor cluster image version ID
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.ChildImageVersionId = null;

        /**
         * Cluster image version name
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.ImageVersionName = null;

        /**
         * Whether to enable the standby cluster
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {boolean || null}
         */
        this.StartStandbyCluster = null;

        /**
         * Whether the elastic scaling of the spark jar monthly subscription cluster is enabled
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {boolean || null}
         */
        this.ElasticSwitch = null;

        /**
         * Upper limit of the spark jar's monthly subscribed cluster elasticity
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.ElasticLimit = null;

        /**
         * Whether it is the default engine
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {boolean || null}
         */
        this.DefaultHouse = null;

        /**
         * Maximum concurrency number of a single cluster
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.MaxConcurrency = null;

        /**
         * Maximum time for the task to queue
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.TolerableQueueTime = null;

        /**
         * User AppID
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.UserAppId = null;

        /**
         * User uin
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.UserUin = null;

        /**
         * SessionResourceTemplate
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {SessionResourceTemplate || null}
         */
        this.SessionResourceTemplate = null;

        /**
         * Automatic authorization switch
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {boolean || null}
         */
        this.AutoAuthorization = null;

        /**
         * Engine version, supporting Native/SuperSQL
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.EngineGeneration = null;

        /**
         * Detailed engine type, supporting SparkSQL/SparkBatch/PrestoSQL/Kyuubi
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.EngineTypeDetail = null;

        /**
         * Engine network ID
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.EngineNetworkId = null;

        /**
         * Number of resource groups associated with the standard engine
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.EngineResourceGroupCount = null;

        /**
         * Current usage of the engine (Cu)
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {number || null}
         */
        this.EngineResourceUsedCU = null;

        /**
         * Access information of the engine
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {Array.<AccessInfo> || null}
         */
        this.AccessInfos = null;

        /**
         * Name of the network where the engine is located
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.EngineNetworkName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineName = 'DataEngineName' in params ? params.DataEngineName : null;
        this.EngineType = 'EngineType' in params ? params.EngineType : null;
        this.ClusterType = 'ClusterType' in params ? params.ClusterType : null;
        this.QuotaId = 'QuotaId' in params ? params.QuotaId : null;
        this.State = 'State' in params ? params.State : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.Mode = 'Mode' in params ? params.Mode : null;
        this.MinClusters = 'MinClusters' in params ? params.MinClusters : null;
        this.MaxClusters = 'MaxClusters' in params ? params.MaxClusters : null;
        this.AutoResume = 'AutoResume' in params ? params.AutoResume : null;
        this.SpendAfter = 'SpendAfter' in params ? params.SpendAfter : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.DefaultDataEngine = 'DefaultDataEngine' in params ? params.DefaultDataEngine : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.IsolatedTime = 'IsolatedTime' in params ? params.IsolatedTime : null;
        this.ReversalTime = 'ReversalTime' in params ? params.ReversalTime : null;
        this.UserAlias = 'UserAlias' in params ? params.UserAlias : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new TagInfo();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }
        this.Permissions = 'Permissions' in params ? params.Permissions : null;
        this.AutoSuspend = 'AutoSuspend' in params ? params.AutoSuspend : null;
        this.CrontabResumeSuspend = 'CrontabResumeSuspend' in params ? params.CrontabResumeSuspend : null;

        if (params.CrontabResumeSuspendStrategy) {
            let obj = new CrontabResumeSuspendStrategy();
            obj.deserialize(params.CrontabResumeSuspendStrategy)
            this.CrontabResumeSuspendStrategy = obj;
        }
        this.EngineExecType = 'EngineExecType' in params ? params.EngineExecType : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.AutoSuspendTime = 'AutoSuspendTime' in params ? params.AutoSuspendTime : null;

        if (params.NetworkConnectionSet) {
            this.NetworkConnectionSet = new Array();
            for (let z in params.NetworkConnectionSet) {
                let obj = new NetworkConnection();
                obj.deserialize(params.NetworkConnectionSet[z]);
                this.NetworkConnectionSet.push(obj);
            }
        }
        this.UiURL = 'UiURL' in params ? params.UiURL : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ImageVersionId = 'ImageVersionId' in params ? params.ImageVersionId : null;
        this.ChildImageVersionId = 'ChildImageVersionId' in params ? params.ChildImageVersionId : null;
        this.ImageVersionName = 'ImageVersionName' in params ? params.ImageVersionName : null;
        this.StartStandbyCluster = 'StartStandbyCluster' in params ? params.StartStandbyCluster : null;
        this.ElasticSwitch = 'ElasticSwitch' in params ? params.ElasticSwitch : null;
        this.ElasticLimit = 'ElasticLimit' in params ? params.ElasticLimit : null;
        this.DefaultHouse = 'DefaultHouse' in params ? params.DefaultHouse : null;
        this.MaxConcurrency = 'MaxConcurrency' in params ? params.MaxConcurrency : null;
        this.TolerableQueueTime = 'TolerableQueueTime' in params ? params.TolerableQueueTime : null;
        this.UserAppId = 'UserAppId' in params ? params.UserAppId : null;
        this.UserUin = 'UserUin' in params ? params.UserUin : null;

        if (params.SessionResourceTemplate) {
            let obj = new SessionResourceTemplate();
            obj.deserialize(params.SessionResourceTemplate)
            this.SessionResourceTemplate = obj;
        }
        this.AutoAuthorization = 'AutoAuthorization' in params ? params.AutoAuthorization : null;
        this.EngineGeneration = 'EngineGeneration' in params ? params.EngineGeneration : null;
        this.EngineTypeDetail = 'EngineTypeDetail' in params ? params.EngineTypeDetail : null;
        this.EngineNetworkId = 'EngineNetworkId' in params ? params.EngineNetworkId : null;
        this.EngineResourceGroupCount = 'EngineResourceGroupCount' in params ? params.EngineResourceGroupCount : null;
        this.EngineResourceUsedCU = 'EngineResourceUsedCU' in params ? params.EngineResourceUsedCU : null;

        if (params.AccessInfos) {
            this.AccessInfos = new Array();
            for (let z in params.AccessInfos) {
                let obj = new AccessInfo();
                obj.deserialize(params.AccessInfos[z]);
                this.AccessInfos.push(obj);
            }
        }
        this.EngineNetworkName = 'EngineNetworkName' in params ? params.EngineNetworkName : null;

    }
}

/**
 * DescribeSessionImageVersion response structure.
 * @class
 */
class DescribeSessionImageVersionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Expands the image list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<EngineSessionImage> || null}
         */
        this.EngineSessionImages = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.EngineSessionImages) {
            this.EngineSessionImages = new Array();
            for (let z in params.EngineSessionImages) {
                let obj = new EngineSessionImage();
                obj.deserialize(params.EngineSessionImages[z]);
                this.EngineSessionImages.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachDataMaskPolicy response structure.
 * @class
 */
class AttachDataMaskPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSessionImageVersion request structure.
 * @class
 */
class DescribeSessionImageVersionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine Id.
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * Framework type: machine-learning, python, spark-ml.
         * @type {string || null}
         */
        this.FrameworkType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.FrameworkType = 'FrameworkType' in params ? params.FrameworkType : null;

    }
}

/**
 * AlterDMSDatabase request structure.
 * @class
 */
class AlterDMSDatabaseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Current name
         * @type {string || null}
         */
        this.CurrentName = null;

        /**
         * Schema name
         * @type {string || null}
         */
        this.SchemaName = null;

        /**
         * Path
         * @type {string || null}
         */
        this.Location = null;

        /**
         * Basic object
         * @type {Asset || null}
         */
        this.Asset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CurrentName = 'CurrentName' in params ? params.CurrentName : null;
        this.SchemaName = 'SchemaName' in params ? params.SchemaName : null;
        this.Location = 'Location' in params ? params.Location : null;

        if (params.Asset) {
            let obj = new Asset();
            obj.deserialize(params.Asset)
            this.Asset = obj;
        }

    }
}

/**
 * CheckDataEngineImageCanBeUpgrade request structure.
 * @class
 */
class CheckDataEngineImageCanBeUpgradeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.DataEngineId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;

    }
}

/**
 *  SQL query task
 * @class
 */
class SQLTask extends  AbstractModel {
    constructor(){
        super();

        /**
         * Base64-encrypted SQL statement
         * @type {string || null}
         */
        this.SQL = null;

        /**
         * Task configuration information
         * @type {Array.<KVPair> || null}
         */
        this.Config = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SQL = 'SQL' in params ? params.SQL : null;

        if (params.Config) {
            this.Config = new Array();
            for (let z in params.Config) {
                let obj = new KVPair();
                obj.deserialize(params.Config[z]);
                this.Config.push(obj);
            }
        }

    }
}

/**
 * Partial information of the user
 * @class
 */
class UserMessage extends  AbstractModel {
    constructor(){
        super();

        /**
         * User Id which matches the sub-user UIN on the CAM side
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * User description
Note: The returned value of this field may be null, indicating that no valid value is obtained.
         * @type {string || null}
         */
        this.UserDescription = null;

        /**
         * The creator of the current user
         * @type {string || null}
         */
        this.Creator = null;

        /**
         * The creation time of the current user, e.g. 16:19:32, July 28, 2021
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * User alias
         * @type {string || null}
         */
        this.UserAlias = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserDescription = 'UserDescription' in params ? params.UserDescription : null;
        this.Creator = 'Creator' in params ? params.Creator : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UserAlias = 'UserAlias' in params ? params.UserAlias : null;

    }
}

/**
 * DescribeOtherCHDFSBindingList response structure.
 * @class
 */
class DescribeOtherCHDFSBindingListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List not bound to DLC products
         * @type {Array.<OtherCHDFSBinding> || null}
         */
        this.OtherCHDFSBindingList = null;

        /**
         * Total records
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.OtherCHDFSBindingList) {
            this.OtherCHDFSBindingList = new Array();
            for (let z in params.OtherCHDFSBindingList) {
                let obj = new OtherCHDFSBinding();
                obj.deserialize(params.OtherCHDFSBindingList[z]);
                this.OtherCHDFSBindingList.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUsers response structure.
 * @class
 */
class DescribeUsersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total queried number of users queried
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Collection of the queried information of the authorized user
         * @type {Array.<UserInfo> || null}
         */
        this.UserSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.UserSet) {
            this.UserSet = new Array();
            for (let z in params.UserSet) {
                let obj = new UserInfo();
                obj.deserialize(params.UserSet[z]);
                this.UserSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SwitchDataEngineImage request structure.
 * @class
 */
class SwitchDataEngineImageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Engine ID
         * @type {string || null}
         */
        this.DataEngineId = null;

        /**
         * New image version ID
         * @type {string || null}
         */
        this.NewImageVersionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DataEngineId = 'DataEngineId' in params ? params.DataEngineId : null;
        this.NewImageVersionId = 'NewImageVersionId' in params ? params.NewImageVersionId : null;

    }
}

/**
 * AttachUserPolicy response structure.
 * @class
 */
class AttachUserPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDMSDatabase request structure.
 * @class
 */
class CreateDMSDatabaseRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Basic metadata object
         * @type {Asset || null}
         */
        this.Asset = null;

        /**
         * Schema directory
         * @type {string || null}
         */
        this.SchemaName = null;

        /**
         * Db storage path
         * @type {string || null}
         */
        this.Location = null;

        /**
         * Database name
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Asset) {
            let obj = new Asset();
            obj.deserialize(params.Asset)
            this.Asset = obj;
        }
        this.SchemaName = 'SchemaName' in params ? params.SchemaName : null;
        this.Location = 'Location' in params ? params.Location : null;
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * Job information
 * @class
 */
class JobResponseInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobName = null;

        /**
         * Statistics
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {StatisticInfo || null}
         */
        this.StatisticInfo = null;

        /**
         * Job configuration
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.JobConfiguration = null;

        /**
         * The current status of the job: 0: initializing; 1: running; 2: executed; 3: writing data; 4: queuing; -1: execution failed; -3: manually terminated. The job execution result is returned only when the job is successfully executed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.JobStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobName = 'JobName' in params ? params.JobName : null;

        if (params.StatisticInfo) {
            let obj = new StatisticInfo();
            obj.deserialize(params.StatisticInfo)
            this.StatisticInfo = obj;
        }
        this.JobConfiguration = 'JobConfiguration' in params ? params.JobConfiguration : null;
        this.JobStatus = 'JobStatus' in params ? params.JobStatus : null;

    }
}

/**
 * DetachWorkGroupPolicy request structure.
 * @class
 */
class DetachWorkGroupPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Working group ID
         * @type {number || null}
         */
        this.WorkGroupId = null;

        /**
         * Collection of unbound permissions
         * @type {Array.<Policy> || null}
         */
        this.PolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WorkGroupId = 'WorkGroupId' in params ? params.WorkGroupId : null;

        if (params.PolicySet) {
            this.PolicySet = new Array();
            for (let z in params.PolicySet) {
                let obj = new Policy();
                obj.deserialize(params.PolicySet[z]);
                this.PolicySet.push(obj);
            }
        }

    }
}

/**
 * DeleteCHDFSBindingProduct response structure.
 * @class
 */
class DeleteCHDFSBindingProductResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDataEnginePythonSparkImages response structure.
 * @class
 */
class DescribeDataEnginePythonSparkImagesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * PYSPARK image information list
         * @type {Array.<PythonSparkImage> || null}
         */
        this.PythonSparkImages = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.PythonSparkImages) {
            this.PythonSparkImages = new Array();
            for (let z in params.PythonSparkImages) {
                let obj = new PythonSparkImage();
                obj.deserialize(params.PythonSparkImages[z]);
                this.PythonSparkImages.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUser request structure.
 * @class
 */
class ModifyUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID which matches UIN on the CAM side
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * User description
         * @type {string || null}
         */
        this.UserDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserDescription = 'UserDescription' in params ? params.UserDescription : null;

    }
}

/**
 * Migrating column objects
 * @class
 */
class DMSColumn extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Sort
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Position = null;

        /**
         * Additional Parameters
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<KVPair> || null}
         */
        this.Params = null;

        /**
         * Business parameters
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<KVPair> || null}
         */
        this.BizParams = null;

        /**
         * Whether partitioned
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsPartition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Position = 'Position' in params ? params.Position : null;

        if (params.Params) {
            this.Params = new Array();
            for (let z in params.Params) {
                let obj = new KVPair();
                obj.deserialize(params.Params[z]);
                this.Params.push(obj);
            }
        }

        if (params.BizParams) {
            this.BizParams = new Array();
            for (let z in params.BizParams) {
                let obj = new KVPair();
                obj.deserialize(params.BizParams[z]);
                this.BizParams.push(obj);
            }
        }
        this.IsPartition = 'IsPartition' in params ? params.IsPartition : null;

    }
}

/**
 * UpdateDataMaskStrategy response structure.
 * @class
 */
class UpdateDataMaskStrategyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * TensorFlow, Pytorch, SK-learn image information list.
 * @class
 */
class EngineSessionImage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the unique id of the Spark mirror.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkImageId = null;

        /**
         * Spark image version name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkImageVersion = null;

        /**
         * Minor version image type. 1: TensorFlow, 2: Pytorch, 3: SK-learn.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SparkImageType = null;

        /**
         * Image address.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SparkImageTag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SparkImageId = 'SparkImageId' in params ? params.SparkImageId : null;
        this.SparkImageVersion = 'SparkImageVersion' in params ? params.SparkImageVersion : null;
        this.SparkImageType = 'SparkImageType' in params ? params.SparkImageType : null;
        this.SparkImageTag = 'SparkImageTag' in params ? params.SparkImageTag : null;

    }
}

/**
 * UpdateRowFilter request structure.
 * @class
 */
class UpdateRowFilterRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the row filter policy, which can be obtained using the `DescribeUserInfo` or `DescribeWorkGroupInfo` API.
         * @type {number || null}
         */
        this.PolicyId = null;

        /**
         * The new filter policy.
         * @type {Policy || null}
         */
        this.Policy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PolicyId = 'PolicyId' in params ? params.PolicyId : null;

        if (params.Policy) {
            let obj = new Policy();
            obj.deserialize(params.Policy)
            this.Policy = obj;
        }

    }
}

/**
 * Table field information
 * @class
 */
class TColumn extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Field type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Field description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Comment = null;

        /**
         * Field default values
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Default = null;

        /**
         * Is the field non-empty?
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.NotNull = null;

        /**
         * Indicate the length of the entire numeric with a value of 1-38
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Precision = null;

        /**
         * Indicates the length of the decimal part.
Scale is smaller than Precision.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Scale = null;

        /**
         * Field position: Fields with smaller values need to be placed first.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Position = null;

        /**
         * Whether it is a partition field
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsPartition = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Comment = 'Comment' in params ? params.Comment : null;
        this.Default = 'Default' in params ? params.Default : null;
        this.NotNull = 'NotNull' in params ? params.NotNull : null;
        this.Precision = 'Precision' in params ? params.Precision : null;
        this.Scale = 'Scale' in params ? params.Scale : null;
        this.Position = 'Position' in params ? params.Position : null;
        this.IsPartition = 'IsPartition' in params ? params.IsPartition : null;

    }
}

/**
 * DescribeResultDownload request structure.
 * @class
 */
class DescribeResultDownloadRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The query task ID.
         * @type {string || null}
         */
        this.DownloadId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DownloadId = 'DownloadId' in params ? params.DownloadId : null;

    }
}

module.exports = {
    UserDetailInfo: UserDetailInfo,
    CheckDataEngineConfigPairsValidityResponse: CheckDataEngineConfigPairsValidityResponse,
    DescribeResultDownloadResponse: DescribeResultDownloadResponse,
    AccessInfo: AccessInfo,
    PrestoMonitorMetrics: PrestoMonitorMetrics,
    ModifyDataEngineDescriptionRequest: ModifyDataEngineDescriptionRequest,
    StatementInformation: StatementInformation,
    DescribeUpdatableDataEnginesResponse: DescribeUpdatableDataEnginesResponse,
    DeleteUserRequest: DeleteUserRequest,
    DescribeUserDataEngineConfigResponse: DescribeUserDataEngineConfigResponse,
    Asset: Asset,
    DataEngineScaleInfoDetail: DataEngineScaleInfoDetail,
    DescribeDataMaskStrategiesResponse: DescribeDataMaskStrategiesResponse,
    SparkSessionBatchLogOperate: SparkSessionBatchLogOperate,
    DescribeTaskResultResponse: DescribeTaskResultResponse,
    DeleteDataEngineResponse: DeleteDataEngineResponse,
    DescribeDMSDatabaseListRequest: DescribeDMSDatabaseListRequest,
    DropDLCTableRequest: DropDLCTableRequest,
    CosPermission: CosPermission,
    CreateDLCTableResponse: CreateDLCTableResponse,
    ModifyGovernEventRuleResponse: ModifyGovernEventRuleResponse,
    DescribeQueryRequest: DescribeQueryRequest,
    SparkMonitorMetrics: SparkMonitorMetrics,
    RestartDataEngineRequest: RestartDataEngineRequest,
    CreateDMSDatabaseResponse: CreateDMSDatabaseResponse,
    CreateStoreLocationResponse: CreateStoreLocationResponse,
    DescribeDMSDatabaseResponse: DescribeDMSDatabaseResponse,
    DescribeTablesNameRequest: DescribeTablesNameRequest,
    Policys: Policys,
    DescribeOtherCHDFSBindingListRequest: DescribeOtherCHDFSBindingListRequest,
    ModifyWorkGroupResponse: ModifyWorkGroupResponse,
    DetachUserPolicyResponse: DetachUserPolicyResponse,
    SparkJobInfo: SparkJobInfo,
    SwitchDataEngineRequest: SwitchDataEngineRequest,
    SuspendResumeDataEngineResponse: SuspendResumeDataEngineResponse,
    DeleteSparkAppRequest: DeleteSparkAppRequest,
    DLCCatalogAccess: DLCCatalogAccess,
    CheckGrantedPermissionResponse: CheckGrantedPermissionResponse,
    ModifyUserResponse: ModifyUserResponse,
    SwitchDataEngineImageResponse: SwitchDataEngineImageResponse,
    PythonSparkImage: PythonSparkImage,
    Task: Task,
    DataEngineConfigInstanceInfo: DataEngineConfigInstanceInfo,
    DetachUserPolicyRequest: DetachUserPolicyRequest,
    CrontabResumeSuspendStrategy: CrontabResumeSuspendStrategy,
    DescribeQueryResponse: DescribeQueryResponse,
    CreateCHDFSBindingProductRequest: CreateCHDFSBindingProductRequest,
    DescribeTasksResponse: DescribeTasksResponse,
    DropDMSTableResponse: DropDMSTableResponse,
    RestartDataEngineResponse: RestartDataEngineResponse,
    CommonMetrics: CommonMetrics,
    UserRole: UserRole,
    DataEngineBasicInfo: DataEngineBasicInfo,
    DetachWorkGroupPolicyResponse: DetachWorkGroupPolicyResponse,
    DescribeSparkSessionBatchSqlLogResponse: DescribeSparkSessionBatchSqlLogResponse,
    DescribeDLCTableListResponse: DescribeDLCTableListResponse,
    GenerateCreateMangedTableSqlRequest: GenerateCreateMangedTableSqlRequest,
    DescribeUserTypeRequest: DescribeUserTypeRequest,
    SwitchDataEngineResponse: SwitchDataEngineResponse,
    CheckDataEngineConfigPairsValidityRequest: CheckDataEngineConfigPairsValidityRequest,
    MountPointAssociates: MountPointAssociates,
    DescribeLakeFsInfoRequest: DescribeLakeFsInfoRequest,
    DLCTable: DLCTable,
    ModifySparkAppRequest: ModifySparkAppRequest,
    CreateCHDFSBindingProductResponse: CreateCHDFSBindingProductResponse,
    DescribeUserInfoRequest: DescribeUserInfoRequest,
    CHDFSProductVpcInfo: CHDFSProductVpcInfo,
    GenerateCreateMangedTableSqlResponse: GenerateCreateMangedTableSqlResponse,
    WorkGroupMessage: WorkGroupMessage,
    UpdateDataEngineConfigResponse: UpdateDataEngineConfigResponse,
    UserIdSetOfWorkGroupId: UserIdSetOfWorkGroupId,
    DataMaskStrategy: DataMaskStrategy,
    DescribeAdvancedStoreLocationResponse: DescribeAdvancedStoreLocationResponse,
    DescribeTablesNameResponse: DescribeTablesNameResponse,
    DescribeAdvancedStoreLocationRequest: DescribeAdvancedStoreLocationRequest,
    UpdateDataEngineRequest: UpdateDataEngineRequest,
    DescribeSparkAppJobRequest: DescribeSparkAppJobRequest,
    DescribeDLCTableListRequest: DescribeDLCTableListRequest,
    DeleteDataMaskStrategyResponse: DeleteDataMaskStrategyResponse,
    DescribeTasksRequest: DescribeTasksRequest,
    CreateSparkAppTaskRequest: CreateSparkAppTaskRequest,
    ModifySparkAppBatchResponse: ModifySparkAppBatchResponse,
    DescribeUserTypeResponse: DescribeUserTypeResponse,
    DeleteWorkGroupRequest: DeleteWorkGroupRequest,
    KVPair: KVPair,
    QueryResultResponse: QueryResultResponse,
    CheckDataEngineImageCanBeUpgradeResponse: CheckDataEngineImageCanBeUpgradeResponse,
    AttachUserPolicyRequest: AttachUserPolicyRequest,
    CreateInternalTableRequest: CreateInternalTableRequest,
    ResourceBaseInfo: ResourceBaseInfo,
    DeleteThirdPartyAccessUserRequest: DeleteThirdPartyAccessUserRequest,
    DescribeTaskStatisticsRequest: DescribeTaskStatisticsRequest,
    AttachWorkGroupPolicyRequest: AttachWorkGroupPolicyRequest,
    ModifyAdvancedStoreLocationRequest: ModifyAdvancedStoreLocationRequest,
    DescribeDataEnginesScaleDetailResponse: DescribeDataEnginesScaleDetailResponse,
    CreateUserResponse: CreateUserResponse,
    DescribeDataEngineResponse: DescribeDataEngineResponse,
    RevokeDLCCatalogAccessResponse: RevokeDLCCatalogAccessResponse,
    DeleteCHDFSBindingProductRequest: DeleteCHDFSBindingProductRequest,
    UpdateDataEngineResponse: UpdateDataEngineResponse,
    DescribeTaskStatisticsResponse: DescribeTaskStatisticsResponse,
    DeleteUserResponse: DeleteUserResponse,
    SparkSessionBatchLog: SparkSessionBatchLog,
    DescribeEngineUsageInfoRequest: DescribeEngineUsageInfoRequest,
    SmartOptimizerWrittenPolicy: SmartOptimizerWrittenPolicy,
    TPartition: TPartition,
    DescribeForbiddenTableProRequest: DescribeForbiddenTableProRequest,
    CreateDataEngineResponse: CreateDataEngineResponse,
    VpcInfo: VpcInfo,
    DescribeSparkAppJobsRequest: DescribeSparkAppJobsRequest,
    PermissionResponseInfo: PermissionResponseInfo,
    DescribeJobsResponse: DescribeJobsResponse,
    DescribeDataEngineRequest: DescribeDataEngineRequest,
    DataMaskStrategyInfo: DataMaskStrategyInfo,
    GroupInfo: GroupInfo,
    RollbackDataEngineImageResponse: RollbackDataEngineImageResponse,
    QueryResultRequest: QueryResultRequest,
    LakeFsInfo: LakeFsInfo,
    ExternalDataConfiguration: ExternalDataConfiguration,
    CheckDataEngineImageCanBeRollbackRequest: CheckDataEngineImageCanBeRollbackRequest,
    CreateDataEngineRequest: CreateDataEngineRequest,
    ModifySparkAppBatchRequest: ModifySparkAppBatchRequest,
    DescribeSparkAppTasksRequest: DescribeSparkAppTasksRequest,
    DescribeDataEnginePythonSparkImagesRequest: DescribeDataEnginePythonSparkImagesRequest,
    SmartOptimizerPolicy: SmartOptimizerPolicy,
    CreateTaskRequest: CreateTaskRequest,
    RegisterThirdPartyAccessUserResponse: RegisterThirdPartyAccessUserResponse,
    ModifySparkAppResponse: ModifySparkAppResponse,
    FavorInfo: FavorInfo,
    DescribeUserInfoResponse: DescribeUserInfoResponse,
    ModifyUserTypeRequest: ModifyUserTypeRequest,
    DeleteDataMaskStrategyRequest: DeleteDataMaskStrategyRequest,
    RollbackDataEngineImageRequest: RollbackDataEngineImageRequest,
    DescribeWorkGroupsResponse: DescribeWorkGroupsResponse,
    DescribeUsersRequest: DescribeUsersRequest,
    DescribeSparkSessionBatchSqlLogRequest: DescribeSparkSessionBatchSqlLogRequest,
    Property: Property,
    TasksOverview: TasksOverview,
    DescribeUpdatableDataEnginesRequest: DescribeUpdatableDataEnginesRequest,
    Execution: Execution,
    DescribeDataMaskStrategiesRequest: DescribeDataMaskStrategiesRequest,
    SmartOptimizerLifecyclePolicy: SmartOptimizerLifecyclePolicy,
    DeleteUsersFromWorkGroupResponse: DeleteUsersFromWorkGroupResponse,
    AddUsersToWorkGroupRequest: AddUsersToWorkGroupRequest,
    DescribeStoreLocationRequest: DescribeStoreLocationRequest,
    CreateDataMaskStrategyRequest: CreateDataMaskStrategyRequest,
    DescribeDLCCatalogAccessResponse: DescribeDLCCatalogAccessResponse,
    AddUsersToWorkGroupResponse: AddUsersToWorkGroupResponse,
    CreateResultDownloadResponse: CreateResultDownloadResponse,
    DescribeUserRolesResponse: DescribeUserRolesResponse,
    DescribeJobResponse: DescribeJobResponse,
    GetOptimizerPolicyRequest: GetOptimizerPolicyRequest,
    Users: Users,
    GrantDLCCatalogAccessRequest: GrantDLCCatalogAccessRequest,
    DataEngineConfigPair: DataEngineConfigPair,
    SessionResourceTemplate: SessionResourceTemplate,
    DropDMSTableRequest: DropDMSTableRequest,
    UpdateDataMaskStrategyRequest: UpdateDataMaskStrategyRequest,
    StatisticInfo: StatisticInfo,
    AttachWorkGroupPolicyResponse: AttachWorkGroupPolicyResponse,
    ModifyAdvancedStoreLocationResponse: ModifyAdvancedStoreLocationResponse,
    DescribeSubUserAccessPolicyResponse: DescribeSubUserAccessPolicyResponse,
    TaskResponseInfo: TaskResponseInfo,
    RevokeDLCCatalogAccessRequest: RevokeDLCCatalogAccessRequest,
    UpgradeDataEngineImageResponse: UpgradeDataEngineImageResponse,
    AttachDataMaskPolicyRequest: AttachDataMaskPolicyRequest,
    DMSSds: DMSSds,
    OpendThirdAccessUserInfo: OpendThirdAccessUserInfo,
    WorkGroupInfo: WorkGroupInfo,
    CreateSparkAppTaskResponse: CreateSparkAppTaskResponse,
    CancelTaskRequest: CancelTaskRequest,
    CheckPermission: CheckPermission,
    DropDMSDatabaseRequest: DropDMSDatabaseRequest,
    DescribeDataEngineImageVersionsRequest: DescribeDataEngineImageVersionsRequest,
    BindWorkGroupsToUserResponse: BindWorkGroupsToUserResponse,
    CreateDataMaskStrategyResponse: CreateDataMaskStrategyResponse,
    DescribeStoreLocationResponse: DescribeStoreLocationResponse,
    ModifyDataEngineDescriptionResponse: ModifyDataEngineDescriptionResponse,
    DescribeJobRequest: DescribeJobRequest,
    DropDLCTableResponse: DropDLCTableResponse,
    DescribeUserRolesRequest: DescribeUserRolesRequest,
    QueryTaskCostDetailResponse: QueryTaskCostDetailResponse,
    OtherCHDFSBinding: OtherCHDFSBinding,
    WorkGroups: WorkGroups,
    ResourceInfo: ResourceInfo,
    CreateDLCTableRequest: CreateDLCTableRequest,
    DMSSourceDatabaseInfo: DMSSourceDatabaseInfo,
    DescribeSubUserAccessPolicyRequest: DescribeSubUserAccessPolicyRequest,
    UpgradeDataEngineImageRequest: UpgradeDataEngineImageRequest,
    SmartPolicy: SmartPolicy,
    SmartOptimizerIndexPolicy: SmartOptimizerIndexPolicy,
    BindWorkGroupsToUserRequest: BindWorkGroupsToUserRequest,
    Column: Column,
    VpcCidrBlock: VpcCidrBlock,
    RenewDataEngineRequest: RenewDataEngineRequest,
    DescribeTaskResultRequest: DescribeTaskResultRequest,
    UpdateUserDataEngineConfigRequest: UpdateUserDataEngineConfigRequest,
    Filter: Filter,
    DescribeLakeFsDirSummaryResponse: DescribeLakeFsDirSummaryResponse,
    TableBaseInfo: TableBaseInfo,
    DescribeForbiddenTableProResponse: DescribeForbiddenTableProResponse,
    DescribeWorkGroupInfoRequest: DescribeWorkGroupInfoRequest,
    CreateUserRequest: CreateUserRequest,
    DropDMSDatabaseResponse: DropDMSDatabaseResponse,
    ModifyWorkGroupRequest: ModifyWorkGroupRequest,
    DescribeDLCTableRequest: DescribeDLCTableRequest,
    CancelTaskResponse: CancelTaskResponse,
    DataGovernPolicy: DataGovernPolicy,
    DeleteWorkGroupResponse: DeleteWorkGroupResponse,
    DescribeDLCCatalogAccessRequest: DescribeDLCCatalogAccessRequest,
    WorkGroupIdSetOfUserId: WorkGroupIdSetOfUserId,
    CheckGrantedPermissionRequest: CheckGrantedPermissionRequest,
    DescribeDLCTableResponse: DescribeDLCTableResponse,
    CreateWorkGroupResponse: CreateWorkGroupResponse,
    RegisterThirdPartyAccessUserRequest: RegisterThirdPartyAccessUserRequest,
    DescribeEngineUsageInfoResponse: DescribeEngineUsageInfoResponse,
    DescribeWorkGroupInfoResponse: DescribeWorkGroupInfoResponse,
    CheckDataEngineImageCanBeRollbackResponse: CheckDataEngineImageCanBeRollbackResponse,
    SmartPolicyBaseInfo: SmartPolicyBaseInfo,
    CreateStoreLocationRequest: CreateStoreLocationRequest,
    DescribeThirdPartyAccessUserResponse: DescribeThirdPartyAccessUserResponse,
    CreateResultDownloadRequest: CreateResultDownloadRequest,
    DescribeLakeFsInfoResponse: DescribeLakeFsInfoResponse,
    DescribeJobsRequest: DescribeJobsRequest,
    CancelSparkSessionBatchSQLResponse: CancelSparkSessionBatchSQLResponse,
    DescribeSparkAppJobResponse: DescribeSparkAppJobResponse,
    DMSPartition: DMSPartition,
    WorkGroupDetailInfo: WorkGroupDetailInfo,
    DescribeThirdPartyAccessUserRequest: DescribeThirdPartyAccessUserRequest,
    GetOptimizerPolicyResponse: GetOptimizerPolicyResponse,
    DeleteDataEngineRequest: DeleteDataEngineRequest,
    TasksInfo: TasksInfo,
    DataEngineImageVersion: DataEngineImageVersion,
    CreateSparkSessionBatchSQLResponse: CreateSparkSessionBatchSQLResponse,
    DescribeDMSDatabaseRequest: DescribeDMSDatabaseRequest,
    DescribeLakeFsDirSummaryRequest: DescribeLakeFsDirSummaryRequest,
    Policy: Policy,
    DescribeDMSDatabaseListResponse: DescribeDMSDatabaseListResponse,
    ModifyGovernEventRuleRequest: ModifyGovernEventRuleRequest,
    DeleteUsersFromWorkGroupRequest: DeleteUsersFromWorkGroupRequest,
    DMSColumnOrder: DMSColumnOrder,
    CreateSparkAppResponse: CreateSparkAppResponse,
    CreateTaskResponse: CreateTaskResponse,
    DescribeDataEnginesScaleDetailRequest: DescribeDataEnginesScaleDetailRequest,
    DeleteSparkAppResponse: DeleteSparkAppResponse,
    TagInfo: TagInfo,
    NetworkConnection: NetworkConnection,
    CreateTasksRequest: CreateTasksRequest,
    SuspendResumeDataEngineRequest: SuspendResumeDataEngineRequest,
    TaskResultInfo: TaskResultInfo,
    DescribeSparkAppJobsResponse: DescribeSparkAppJobsResponse,
    DeleteThirdPartyAccessUserResponse: DeleteThirdPartyAccessUserResponse,
    DescribeSparkAppTasksResponse: DescribeSparkAppTasksResponse,
    UpdateUserDataEngineConfigResponse: UpdateUserDataEngineConfigResponse,
    ModifyUserTypeResponse: ModifyUserTypeResponse,
    DescribeDataEngineImageVersionsResponse: DescribeDataEngineImageVersionsResponse,
    CancelSparkSessionBatchSQLRequest: CancelSparkSessionBatchSQLRequest,
    DescribeWorkGroupsRequest: DescribeWorkGroupsRequest,
    DescribeUserDataEngineConfigRequest: DescribeUserDataEngineConfigRequest,
    CopyDLCTableResponse: CopyDLCTableResponse,
    UnbindWorkGroupsFromUserRequest: UnbindWorkGroupsFromUserRequest,
    RenewDataEngineResponse: RenewDataEngineResponse,
    UpdateRowFilterResponse: UpdateRowFilterResponse,
    UserInfo: UserInfo,
    CreateTasksResponse: CreateTasksResponse,
    DataMaskStrategyPolicy: DataMaskStrategyPolicy,
    GrantDLCCatalogAccessResponse: GrantDLCCatalogAccessResponse,
    CreateSparkAppRequest: CreateSparkAppRequest,
    DataEngineScaleInfo: DataEngineScaleInfo,
    CreateSparkSessionBatchSQLRequest: CreateSparkSessionBatchSQLRequest,
    CopyDLCTableRequest: CopyDLCTableRequest,
    UnbindWorkGroupsFromUserResponse: UnbindWorkGroupsFromUserResponse,
    QueryTaskCostDetailRequest: QueryTaskCostDetailRequest,
    StreamingStatistics: StreamingStatistics,
    DMSDatabaseInfo: DMSDatabaseInfo,
    AlterDMSDatabaseResponse: AlterDMSDatabaseResponse,
    UpdateDataEngineConfigRequest: UpdateDataEngineConfigRequest,
    CreateWorkGroupRequest: CreateWorkGroupRequest,
    CreateInternalTableResponse: CreateInternalTableResponse,
    DataEngineInfo: DataEngineInfo,
    DescribeSessionImageVersionResponse: DescribeSessionImageVersionResponse,
    AttachDataMaskPolicyResponse: AttachDataMaskPolicyResponse,
    DescribeSessionImageVersionRequest: DescribeSessionImageVersionRequest,
    AlterDMSDatabaseRequest: AlterDMSDatabaseRequest,
    CheckDataEngineImageCanBeUpgradeRequest: CheckDataEngineImageCanBeUpgradeRequest,
    SQLTask: SQLTask,
    UserMessage: UserMessage,
    DescribeOtherCHDFSBindingListResponse: DescribeOtherCHDFSBindingListResponse,
    DescribeUsersResponse: DescribeUsersResponse,
    SwitchDataEngineImageRequest: SwitchDataEngineImageRequest,
    AttachUserPolicyResponse: AttachUserPolicyResponse,
    CreateDMSDatabaseRequest: CreateDMSDatabaseRequest,
    JobResponseInfo: JobResponseInfo,
    DetachWorkGroupPolicyRequest: DetachWorkGroupPolicyRequest,
    DeleteCHDFSBindingProductResponse: DeleteCHDFSBindingProductResponse,
    DescribeDataEnginePythonSparkImagesResponse: DescribeDataEnginePythonSparkImagesResponse,
    ModifyUserRequest: ModifyUserRequest,
    DMSColumn: DMSColumn,
    UpdateDataMaskStrategyResponse: UpdateDataMaskStrategyResponse,
    EngineSessionImage: EngineSessionImage,
    UpdateRowFilterRequest: UpdateRowFilterRequest,
    TColumn: TColumn,
    DescribeResultDownloadRequest: DescribeResultDownloadRequest,

}
